12 lavaan in R Studio

Wie in Kapitel 2 beschrieben, ist lavaanGUI ein Paket der Open-Source-Statistiksoftware R. lavaanGUI baut dabei auf dem Paket lavaan auf. Mit dem Paket lavaan ist es möglich, die gleichen Berechnungen, die man mit lavaanGUI macht, innerhalb R bzw. RStudio durchzuführen. Der Unterschied besteht darin, dass in lavaanGUI einzig die Syntax geschrieben werden muss, um die Daten zu analysieren. In lavaan hingegen müssen mehr Syntaxbefehle verwendet werden, um die Berechnungen durchzuführen. Die Ergebnisse sind aber die gleichen.

Für fortgeschrittenere Analysen von Strukturgleichungsmodellen ist lavaan in R flexibler und sollte der lavaanGUI vorgezogen werden. Aus Gründen der Übersichtlichkeit bietet die lavaanGUI nicht alle Funktionen an, die das R-Paket lavaan anbietet.

In den kommenden Abschnitten erklären wir euch, wie man auch mit RStudio und dem Paket lavaan Modelltestungen durchführt. Dies wird exemplarisch an der Testung eines \(\tau\)-parallelen Modells durchgeführt.

12.1 Schritt 1 - Einlesen der Daten

Um Daten analysieren zu können, müssen diese zuerst einmal eingelesen werden. Damit R weiß, wo die Daten auf eurem PC gespeichert sind, muss zuerst das Arbeitsverzeichnis definiert werden. Wie das genau geht, wird in Kapitel 3 ausführlich beschrieben. Im gleichen Kapitel findet ihr auch nochmal die Beschreibung wie man in RStudio Daten einliest. Für die folgende Modelltestung solltet ihr die Daten in einem Objekt speichern. Die Syntax für den ersten Schritt kann dann so aussehen:

12.2 Schritt 2 - Pakete laden

Um das Paket lavaan verwenden zu können, muss dieses zuerst installiert und geladen werden. Dafür geht man äquivalent zum Installieren und Aufrufen von lavaanGUI vor, wie in Kapitel 2 beschrieben. Die Syntax lautet folgendermaßen:

12.3 Schritt 3 - Spezifikation des Modells

Bei der Verwendung von lavaan wird die gleiche Syntax verwendet, wie auch in lavaanGUI. Allerdings muss die Syntax, um das Modell zu spezifizieren, um einige Komponenten erweitert werden.

Um in lavaan ein Modell zu testen, muss die Syntax einem Objekt zugewiesen werden. Zusätzlich muss die eigentliche Syntax in einfache Anführungszeichen geschrieben werden. Diese beginnen vor der ersten Definition der Parameter (in unserem Fall der Definition von eta) und enden nach der letzten (in unserem Fall die Definition der Fehlervarianzen der manifesten Variablen). In einem Syntaxbeispiel sieht dies folgendermaßen aus:

An diesem Beispiel wird deutlich, dass das Objekt, in dem die Modellspezifikation gespeichert wird, den Namen “modell_TauPar” trägt. Dies ist ein selbst gewählter Name und kann von jedem beliebig verändert werden. Wenn man mehrere Modellspezifikationen durchführt, ist es ratsam, hier einen eindeutigen und leicht wiedererkennbaren Namen zu wählen. Dadurch kann man Verwirrungen und Verwechslungen zwischen Datensätzen und Berechnungen vermeiden. An dem Pfeil hinter dem Objektnamen wird deutlich, dass die Modellspezifikation in dem Objekt diesen Namens gespeichert wird. Wie im oberen Abschnitt beschrieben, beginnt die Modellspezifikation dann mit einem einfachen Anführungszeichen, vor der ersten Parameterdefinition und endet mit dem gleichen Anführungszeichen.

Durch diese Zeilen ist nun das Modell spezifiziert. Wichtig ist hier, dass man, wie auch wenn man lavaanGUI verwendet, bereits alle latenten und manifesten Variablen in die Spezifikation mitaufnimmt. Auch wenn man RStudio noch nicht mitgeteilt hat, auf welchen Datensatz er die Spezifikation anwenden soll. Dies passiert im nächsten Schritt.

12.4 Schritt 4 - Testung des Modells

Um das Modell testen zu können, verwenden wir einen Befehl, der im lavaan-Paket enthalten ist. Der Befehl erlaubt die Berechnung und Testung von Strukturgleichungsmodellen, wie es die Modelle der KTT sind. Strukturgleichungsmodelle werden auf englisch Structural equation models genannt, woher auch die Abkürzung des Befehls “sem” herstammt.

Daher fügen wir der bisherigen Syntax eine Befehlszeile hinzu, um das spezifizierte Modell zu testen. Wir speichern die Ergebnisse des Befehls wiederum in einem Objekt. Dieses Objekt sollte einen ebenfalls eindeutig identifizierbaren Namen tragen, dieser muss sich allerdings vom Objekt, in dem die Modellspezifikation gespeichert ist, unterscheiden. Der Befehl, mit dem die Testung des Modells spezifiziert wird, ist der oben erwähnte sem()-Befehl. Innerhalb des Befehls müssen verschiedene Parameter definiert werden, darunter einmal, auf welche Modellspezifikation der Befehl angewandt wird, welcher Datensatz und welcher Schätzparameter verwendet werden sollen. Dies wird folgendermaßen in der Syntax definiert:

Hier werden die Ergebnisse des Befehls sem() in dem Objekt namens “modell_taupar” gespeichert. Dieser Name unterscheidet sich eindeutig von dem Objekt, in dem die Spezifikation gespeichert ist, da, wie in Kapitel 3.4 beschrieben, R zwischen Groß- und Kleinschreibung unterscheidet. Der erste Parameter des sem()Befehls bezieht sich auf die Spezifikation des Modells. Hier reicht es, wenn der Objektname aufgeführt wird, unter dem die Spezifikation gespeichert wurde. Danach folgt als nächster Parameter, abgetrennt vom ersten durch ein Komma, die Definition des Datensatzes. Der Teilbefehl “data =” ist dabei Teil des sem()-Befehls und kann nicht geändert werden. Hinter dem Gleichheitszeichen wird der Name des Objekts eingetragen, in dem die Daten gespeichert wurden. In diesem Falle wurden die Daten im Objekt “Data” gespeichert. Der letzte Parameter des Befehls ist die Schätzweise. Diese wird aufgerufen durch den Teilbefehl “estimator =”. Hierfür stehen verschiedene Möglichkeiten zur Verfügung, die auch in lavaanGUI gewählt werden können. In diesem Beispiel wurde der Maximum Likelihood (“ml”) Schätzer verwendet. Weitere Optionen sind:

  • General least squares (“gls”), diese können nur für einen kompletten Datensatz, ohne fehlende Daten verwendet werden
  • Weighted least squares (“wls”), diese können ebenfalls nur für komplette Datensätze verwendet werden
  • Diagonally weighted least squares (“dwls”)
  • Unweighted least squares (“uls”)

Welcher Schätzer verwendet werden soll, muss je nach Datenlage und Anforderungen an die Berechnung entschieden werden.

Neben diesen Schätzern, gibt es auch noch verschiedene robuste Schätzer, die robuste Standardfehler und skalierte Teststatistiken berechnen. Für die Maximum Likelihood Schätzung stehen verschiedene robuste Schätzer zur Verfügung, wie “mlm”, “mlmvs” oder “mlr”. Auch hier sollte je nach Berechnungsgrundlage individuell entschieden werden, für welchen Schätzer man sich entscheidet.

Nachdem man diese Syntaxzeile ausgeführt hat, werden die Ergebnisse in Objekt “modell_taupar” gespeichert.

12.5 Schritt 5 - Ergebnisse aufrufen

Um die Ergebnisse der Modelltestung anzeigen zu lassen, wird die, in Kapitel @ref (summary) bereits beschriebene, summary()-Funktion verwendet. Mithilfe dieser Funktion ist es möglich, sich die Ergebnisse der Modelltestung auf die gleiche Art und Weise anzeigen zu lassen, wie auch lavaanGUI sie im Untermenü lavaan Results ausgibt.

Die summary() Funktion beinhaltete ebenfalls verschiedene Parameter. Zu allererst wird die Modelltestung genannt, auf die sich die Funktion bezieht, dies ist hier das “modell_taupar”, in dem die Modelltestung gespeichert wurde. Die folgenden Argumente, beziehen sich auf die Berechnung der Teststatistiken und Schätzer. Das Argument fit.measures = TRUEhat zur Folge, dass, neben dem \(\chi\)^2 Test, weitere Teststatistiken angezeigt und berechnet werden. Darunter fallen alle Teststatistiken der Abschnitte “Model test baseline model”, “User model versus baseline model”, “Loglikelihood and Information Criteria”, “Root Mean Square Error of Approximation” und der “Stardaized Root Mean Square Residual”. Möchte man diese Teststatistiken ausgegeben bekommen, muss das Argument mit TRUE in die Befehlszeile aufgenommen werden. Ist dies nicht der Fall, mit FALSE. Das Argument standardized = TRUE bezweckt die Ausgabe und das Anzeigen zusätzlicher standardisierter Schätzer. Hierfür werden zwei extra Spalten im Ergebnis angezeigt. Die Spalte “Std.lv” bezeichnet die Berechnung, für die nur die latente Variable standardisiert wurde. Die spalte “Std.all” bezeichnet die Berechnung, für die alle, latente und manifeste Variablen, standardisiert wurden. Möchte man die zusätzlichen, standardisierten Schätzer nicht ausgegeben bekommen, muss man das Argument als FALSE aufnehmen. Die vollständige Syntaxzeile lautete folgendermaßen:

Das Ergebnis dieser Syntaxzeile sieht identisch aus, zu dem Ergebnis der lavaanGUI im Unterpunkt lavaan Results. Der Unterschied besteht alleine darin, dass die standardisierten Schätzer in den hinteren zwei Spalten der Modellschätzung, mit ausgegeben werden.

lavaan 0.6-3 ended normally after 23 iterations

  Optimization method                           NLMINB
  Number of free parameters                         10
  Number of equality constraints                     7

  Number of observations                           176

  Estimator                                         ML
  Model Fit Test Statistic                     941.414
  Degrees of freedom                                41
  P-value (Chi-square)                           0.000

Model test baseline model:

  Minimum Function Test Statistic              603.650
  Degrees of freedom                                28
  P-value                                        0.000

User model versus baseline model:

  Comparative Fit Index (CFI)                    0.000
  Tucker-Lewis Index (TLI)                      -0.068

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -2167.253
  Loglikelihood unrestricted model (H1)      -1696.546

  Number of free parameters                          3
  Akaike (AIC)                                4340.506
  Bayesian (BIC)                              4350.017
  Sample-size adjusted Bayesian (BIC)         4340.517

Root Mean Square Error of Approximation:

  RMSEA                                          0.353
  90 Percent Confidence Interval          0.334  0.373
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.440

Parameter Estimates:

  Information                                 Expected
  Information saturated (h1) model          Structured
  Standard Errors                             Standard

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  eta =~                                                                
    y1                1.000                               0.536    0.454
    y2                1.000                               0.536    0.454
    y3                1.000                               0.536    0.454
    y4                1.000                               0.536    0.454
    y5                1.000                               0.536    0.454
    y6                1.000                               0.536    0.454
    y7                1.000                               0.536    0.454
    y8                1.000                               0.536    0.454

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    eta               3.712    0.049   75.516    0.000    6.927    6.927
   .y1                0.000                               0.000    0.000
   .y2                0.000                               0.000    0.000
   .y3                0.000                               0.000    0.000
   .y4                0.000                               0.000    0.000
   .y5                0.000                               0.000    0.000
   .y6                0.000                               0.000    0.000
   .y7                0.000                               0.000    0.000
   .y8                0.000                               0.000    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    eta     (veta)    0.287    0.046    6.287    0.000    1.000    1.000
   .y1      (veps)    1.105    0.045   24.819    0.000    1.105    0.794
   .y2      (veps)    1.105    0.045   24.819    0.000    1.105    0.794
   .y3      (veps)    1.105    0.045   24.819    0.000    1.105    0.794
   .y4      (veps)    1.105    0.045   24.819    0.000    1.105    0.794
   .y5      (veps)    1.105    0.045   24.819    0.000    1.105    0.794
   .y6      (veps)    1.105    0.045   24.819    0.000    1.105    0.794
   .y7      (veps)    1.105    0.045   24.819    0.000    1.105    0.794
   .y8      (veps)    1.105    0.045   24.819    0.000    1.105    0.794

Quelle: http://lavaan.ugent.be/tutorial/tutorial.pdf