PLS SEM mit R
Partial Least Squares SEM
Arndt Regorz, Dipl. Kfm. & MSc. Psychologie, 10.12.2024
Partial Least Squares Strukturgleichungsmodellierung (PLS SEM) ist für bestimmte Fragestellungen eine sehr gute Alternative zum traditionellen kovarianzbasierten SEM (mit Programmen wie AMOS, MPlus, R lavaan).
Dieses Tutorial wird Ihnen zeigen, wie Sie mit R ein PLS SEM Modell schätzen können. Dabei wird das R Package seminr verwendet.
INHALT
0. Überblick
1. Schätzung des Modells
2. Reflektives Messmodell beurteilen
3. Formatives Messmodell beurteilen
4. Strukturmodell beurteilen
5. Literatur
0. Überblick
Um ein PLS SEM-Modell mit seminr zu schätzen, gibt es drei wesentliche Schritte:
- Aufstellen der Messmodelle (outer model)
- Aufstellen des Strukturmodells (inner model)
- Schätzung des Modells
Diese drei Schritte werden nachfolgend erklärt.
Anschließend muss noch die Modellgüte beurteilt werden (wie gut passen die Messmodelle, wie gut passt das Strukturmodell?). Diese Prüfung unterscheidet sich nach:
- Evaluation eines reflektiven Messmodells
- Evaluation eines formativen Messmodells
- Evaluation des Strukturmodells
Als Beispiel wird in diesem Tutorial ein Datensatz verwendet, der im lavaan Modul eingebaut ist, PoliticalDemocracy. Dieser ist für Sie verfügbar, wenn Sie zusätzlich zu seminr auch lavaan installieren und laden, so dass Sie die Berechnungen aus diesem Tutorial auch selbst nachvollziehen können.
Im Datensatz PoliticalDemocracy wird der Zusammenhang zwischen der Industrialisierung von Entwicklungsländern in 1960 mit dem Zustand deren Demokratie in den Jahren 1960 und 1965 untersucht:
1. Schätzung des Modells
1.1 Aufstellen der Messmodelle
Die Messmodelle definieren, wie die latenten Konstrukte aus den Indikatorvariablen geschätzt werden. Dabei gibt es zwei grundsätzliche Typen von Messmodellen: Reflektive und Formative.
Reflektierende Indikatoren in SEM repräsentieren beobachtete Variablen, die ein zugrunde liegendes Konstrukt messen. Veränderungen im Konstrukt beeinflussen die reflektierenden Indikatoren, und sie sollten eng miteinander zusammenhängen (in der Modellgrafik gehen hier die Pfeile vom Konstrukt zu den Indikatoren).
Formative Indikatoren hingegen repräsentieren beobachtete Variablen, die das Konstrukt beeinflussen (hier gehen in der Modellgrafik die Pfeile von den Indikatoren zum Konstrukt). In solchen Modellen wird keine starke Zusammengehörigkeit zwischen den Indikatoren erwartet.
Die Wahl zwischen den beiden hängt davon ab, wie das Konstrukt in der Forschungskonzeption betrachtet wird.
Zu Beginn müssen Sie natürlich die entsprechenden Module laden, seminr sowie für den hier verwendeten Beispieldatensatz lavaan.
library(seminr)
library(lavaan) # nur für den Beispieldatensatz
1.1.1 Reflektives Messmodell
Hier ist ein mögliches reflektives Messmodell für die drei Konstrukte des Beispieldatensatzes:
measure_poldem <- constructs(
reflective("indus", multi_items("x", 1:3)),
reflective("dem60", multi_items("y", 1:4)),
reflective("dem65", multi_items("y", 5:8))
)
Die construct() Funktion enthält die verschiedenen Konstrukte des Datensatzes.
Für jede einzelne latente Variable wird hier die reflective() Funktion verwendet. Dort wird zunächst der – selbst gewählte – Name des Konstrukts in Anführungszeichen verwendet, anschließend wird angegeben, welche Items das Konstrukt messen.
Dabei wird hier zur Vereinfachung die multi_items() Funktion verwendet. Dort wird zunächst der für alle Itemnamen gleiche Teil genannt, und anschließend die Nummernrange der Itemnummern. Wenn man z.B. die drei Items „depr1“, „depr2“ und „depr3“ hätte, dann wäre der Funktionsaufruf multi_items("depr", 1:3).
Man kann aber alternativ auch die Itemnamen direkt als Vektor eingeben. Der folgende Code ist insoweit also äquivalent zum o.g. Code:
# alternative Definition:
measure_poldem <- constructs(
reflective("indus", c("x1", "x2", "x3")),
reflective("dem60", c("y1", "y2", "y3", "y4")),
reflective("dem65", c("y5", "y6", "y7", "y8"))
)
Als weitere Funktion gibt es noch single_item("....."), wenn man ein Konstrukt hat, das nur durch ein einziges Item gemessen werden soll.
1.1.2 Formatives Messmodell
Wenn wir die gleichen Variablen formativ messen wollten, dann wäre dies hier ein möglicher Code:
measure_poldem_f <- constructs(
composite("indus", multi_items("x", 1:3), weights = mode_B),
composite("dem60", multi_items("y", 1:4), weights = mode_B),
composite("dem65", multi_items("y", 5:8), weights = mode_B)
)
Hier verwenden wir innerhalb der constructs() Funktion statt der reflective() Funktion die composite() Funktion und wir geben als zusätzlichen Parameter noch weights = mode_B an.
Grundsätzlich ist es auch möglich, innerhalb eines Modells beide Formen von Messmodellen zu mixen – es kann also sein, dass einige Ihrer latenten Variablen formativ gemessen werden und einige reflektiv.
1.2 Aufstellen des Strukturmodells
Nachdem wir ein Messmodell definiert haben, definieren wir auch ein Strukturmodell, also den Zusammenhang zwischen den von uns oben definierten Konstrukten.
struct_poldem <- relationships(
paths(from = "indus", to = "dem60"),
paths(from = c("indus", "dem60"), to = "dem65")
)
Die Zuweisung beginnt mit der relationsships() Funktion. In dieser werden die gerichteten Pfade angegeben. Man kann das auf unterschiedliche Weise machen. Ich schreibe jeweils für jede endogene Variable (also für jede Variable, auf die mindestens ein gerichteter Strukturpfad zeigt) eine Zeile, bei der ich hinter from die Variablen aufführe, von denen Pfeile auf die betreffende Variable (hinter „to“) zeigen.
1.3 Schätzung des Modells
Für die Schätzung des Modells nutzen wir die estimate_pls() Funktion. Wir geben an den verwendeten Dataframe, die von uns oben erstellte Definition des Messmodells, die von uns erstellte Definition des Stukturmodells und die Berechnungsmethode für die inner_weights (Strukturpfade).
poldem_pls <- estimate_pls(
data = PoliticalDemocracy,
measurement_model = measure_poldem,
structural_model = struct_poldem,
inner_weights = path_weighting
)
Es gibt noch weitere mögliche Parameter, beispielweise für den Umgang mit fehlenden Daten. Diese können Sie sich wie bei R üblich über die Hilfe anzeigen lassen:
? estimate_pls
Als Output für unseren Beispieldatensatz bekommen wir (hier im Beispiel bei Verwendung der reflektiven Definition des Messmodells, der Ablauf ist beim formativen Messmodell aber gleich, nur dass oben unter „measurement_model“ dann ein formatives Messmodell übergeben werden muss):
Results from package seminr (2.3.2)
Path Coefficients:
dem60 dem65
R^2 0.193 0.977
AdjR^2 0.182 0.977
indus 0.439 0.159
dem60 . 0.909
Reliability:
alpha rhoC AVE rhoA
indus 0.944 0.945 0.853 0.954
dem60 0.870 0.873 0.634 0.882
dem65 0.885 0.885 0.658 0.886
Alpha, rhoC, and rhoA should exceed 0.7 while AVE should exceed 0.5
Unter den „Path Coefficients“ finden wir das R² und das adjustierte R² der zu erklärenden Variablen sowie die standardisierten Pfadgewichte für die drei geschätzten Pfade:
Industrialisierung -> Demokratie1960: 0.439
Industrialisierung -> Demokratie1965: 0.159
Demokratie ->Demokratie1965: 0.909
Wenn man dieses Ergebnis mit der Schätzung durch andere PLS SEM Programme vergleichen möchte (z.B. mit SmartPLS), dann ist es wichtig zu wissen, dass seminr bei reflektiven Messmodellen die sog. „consistent PLS“ Schätzung als Verfahren anwendet, die man z.B. in SmartPLS gesondert einstellen müsste, um zu gleichen Ergebnissen zu kommen.
Auf den unteren Bereich zur Reliabilität gehe ich hier noch nicht ein, zur Bewertung der Modellgüte gibt es von mir gesonderte Tutorials (Links siehe am Anfang des Tutorials).
Wir können uns auch eine Grafik mit den Ergebnissen der Modellschätzung anzeigen lassen:
plot(poldem_pls)
Was wir hier nicht sehen, anders als bei vielen andere statistischen Auswertungen, sind p-Werte. Das liegt daran, dass PLS SEM keine Verteilungsannahmen macht (anders als viele Verfahren, die von der Normalverteilung ausgehen). Daher können wir hier auch keine Teststatistik und keine p-Werte ablesen.
Um im Rahmen von PLS SEM Signifikanztests durchführen zu können, wird das Verfahren Bootstrapping genutzt, einem Verfahren mit zufälligem Resampling. Dieses Verfahren hat keine Verteilungsannahmen. Beim Aufruf mit der bootstrap_model() Funktion übergeben wir das Ergebnis unserer Modellschätzung, die von uns gewünschte Anzahl der Bootstrapstichproben (ich bevorzuge hier mit 10,000 einen recht hohen Wert, auch wenn das dann etwas länger dauert mit der Schätzung, um so stabilere Ergebnisse zu bekommen) sowie optional auch noch ein Seed-Wert, der dafür sorgt, dass Sie bei jedem Aufruf mit den gleichen Daten auch die gleichen Ergebnisse bekommen (welcher Wert hinter seed = steht, ist dabei egal, solange es jeweils bei jedem Aufruf der gleiche Wert ist).
poldem_pls_boot <- bootstrap_model(poldem_pls, nboot = 10000, seed = 12345) summary(poldem_pls_boot, alpha = 0.05)
Jetzt bekommen wir gebootstrappte Konfidenzintervalle. Dabei zeigt ein Konfidenzintervall dann ein signifikantes Ergebnis an, wenn das Konfidenzintervall die Null nicht mit einschließt (wenn also entweder beide Grenzen des Konfidenzintervalls negativ oder beide Grenzen positiv sind). Hier als erster Teil des Outputs die Ergebnisse für die drei strukturellen Pfade:
summary(poldem_pls_boot, alpha = 0.05)$bootstrapped_paths
Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI 97.5% CI
indus -> dem60 0.439 0.439 0.109 4.029 0.215 0.638
indus -> dem65 0.159 0.157 0.063 2.516 0.032 0.281
dem60 -> dem65 0.909 0.910 0.048 18.834 0.805 0.993
Die Konfidenzintervalle für alle drei Pfade schließen jeweils die Null nicht mit ein, sie sind also jeweils signifikant von Null verschieden.
Bevor wir jedoch die o.g. Ergebnisse wirklich verwenden können, müssen wir zunächst die Modellqualität beurteilen (Messmodelle, Strukturmodell).
2. Reflektives Messmodell beurteilen
Um die Güte eines reflektiv spezifizierten Messmodells mit partial least squares (PLS) SEM zu beurteilen, prüft man drei verschiedene Bereiche:
- Reliabilität
- Konvergente Validität
- Divergente Validität
Die nachfolgenden Empfehlungen zur Prüfung dieser drei Bereiche beruhen vor allem auf Hair et al. (2019).
2.1 Reliabilität
Zur Prüfung der Reliabilität gibt es im Wesentlichen zwei Kennzahlen: Die Composite Reliabilität (composite reliability) und Cronbachs Alpha.
Dabei führt Cronbachs Alpha eher zu einer leichten Unterschätzung des wahren Wertes der Reliabilität, während die Composite Reliabilität den wahren Wert tendenziell überschätzen kann. Wenn man nur einen der beiden Werte betrachten will, dann eher die Composite Reliabität, aber sinnvoll ist es, beide Kennzahlen heranzuziehen.
Die Werte sollten möglichst über .70 liegen. Werte über .95 hingegen könnten auf eine zu starke Redundanz der Items hindeuten und sind potentiell problematisch.
In R erhalten Sie die Reliabilität, indem Sie die summary() Funktion für das Ergebnis Ihrer Modellschätzung aufrufen.
summary(poldem_pls)
Als Teil des Outputs erhalten wir:
Reliability:
alpha rhoC AVE rhoA
indus 0.944 0.945 0.853 0.954
dem60 0.870 0.873 0.634 0.882
dem65 0.885 0.885 0.658 0.886
Alpha, rhoC, and rhoA should exceed 0.7 while AVE should exceed 0.5
Cronbachs Alpha ist in der ersten Spalte und liegt für alle drei Konstrukte deutlich über .70. Die Composite Reliabilität (rhoC) liegt ganz nah an diesen Werten und ebenfalls deutlich über .70.
rhoA ist noch ein drittes Reliabilitätsmaß, das häufig zwischen Alpha und der Composite Reliabilität liegt und insofern als Kompromiss zwischen beiden genommen werden kann. AVE hingegen ist ein Validitätsmaß, dazu kommen wir im nächsten Abschnitt bei der Betrachtung der konvergenten Validität.
Die Reliabilität ist hier im Beispiel also gegeben.
2.2 Konvergente Validität
Für die konvergente Validität möchten wir wissen, ob eine Messung positiv mit alternativen Messungen desselben Konstrukts zusammenhängt. Dafür betrachtet man vor allem die durchschnittlich extrahierte Varianz (AVE), die über .50 liegen sollte.
Außerdem wird manchmal noch die sog. Indikatorreliabilität betrachtet (wobei Hair et al, 2019, diese nicht mehr aufführen). Die Indikatorreliabilität sehen wir an den äußeren Ladungen. Diese sollten idealerweise größer als .70 (bzw. genauer: größer als .708 – denn dann würde das Konstrukt mehr als 50% der Varianz des Indikators erklären, denn .708 x .708 = .50) sein. Indikatoren mit Ladungen zwischen .40 und .70 würde man dann eliminieren, wenn ohne den Indikator die Composite Reliabilität besser wird. Indikatoren mit Ladungen unter .40 würde man eigentlich immer eliminieren.
Die AVE hatten wir bereits oben als Teil der Summary erhalten, hier nochmals der Aufruf:
summary(poldem_pls)
Als Teil des Outputs erhalten wir:
Reliability:
alpha rhoC AVE rhoA
indus 0.944 0.945 0.853 0.954
dem60 0.870 0.873 0.634 0.882
dem65 0.885 0.885 0.658 0.886
Alpha, rhoC, and rhoA should exceed 0.7 while AVE should exceed 0.5
In der dritten Spalte sehen wir die AVE. Alle Werte sind höher als. .50.
Die äußeren Ladungen kann man mit dem seminr Modul so anfordern, wieder auf Basis des Fit-Objekts (in meinem Beispiel poldem_pls):
summary(poldem_pls)$loadings
Als Output erhalten wir:
indus dem60 dem65
x1 0.992 0.000 0.000
x2 0.962 0.000 0.000
x3 0.807 0.000 0.000
y1 0.000 0.848 0.000
y2 0.000 0.727 0.000
y3 0.000 0.695 0.000
y4 0.000 0.897 0.000
y5 0.000 0.000 0.832
y6 0.000 0.000 0.771
y7 0.000 0.000 0.817
y8 0.000 0.000 0.823
Mit einer Ausnahme sind alle Ladungen über .70. Die einzige Ausnahme ist y3 und liegt nur minimal unter .70 (bzw. gerundet auf zwei Nachkommastellen bei genau .70). Hier würde ich – entgegen der o.g. Faustregel - in der Praxis vermutlich nicht einmal prüfen, ob ein Wegfall des Items zu einer besseren Composite Reliabilität führt, sondern das Item auf jeden Fall im Modell belassen.
Damit würde ich in diesem Beispiel von konvergenter Validität ausgehen.
2.3 Diskriminante Validität
Bei der Prüfung der diskriminanten Validität geht es um die Frage, wie stark sich das Konstrukt von anderen Konstrukten unterscheidet. Der Zusammenhang zwischen Indikatoren inhaltlich unterschiedlicher Konstrukte sollte kleiner sein als zwischen Indikatoren des gleichen Konstrukts.
Früher hat man hierzu Kriterien wie das Fornell-Larcker-Kriterium und die Kreuzladung verwendet. Inzwischen betrachtet man das HTMT-Verhältnis (Hetereotrait-monotrait). Dabei teilt man die Korrelation zwischen Indikatoren unterschiedlicher Konstrukte durch die Korrelation zwischen Indikatoren des gleichen Konstrukts. Das Ergebnis sollte nicht zu hoch sein. Werte über .90 (für konzeptionell ähnliche Konstrukte) oder über .85 (für konzeptionell unterschiedliche Konstrukte) deuten auf einen Mangel an Diskriminanzvalidität.
Neben der Betrachtung dieser Kennzahl betrachtet man häufig noch ein (i.d.R. einseitiges) 95%-Konfidenzintervall für die HTMT-Statistik. Dieses sollte für keine Konstruktkombination den Wert von 1 enthalten.
Das HTMT-Verhältnis bekommen wir in seminr über:
summary(poldem_pls)$validity
Als Teil des Outputs ergibt sich:
$htmt
indus dem60 dem65
indus . . .
dem60 0.434 . .
dem65 0.556 0.982 .
Der Wert für die beiden Variablen dem60 und dem65 ist hier mit .982 eigentlich zu hoch. Allerdings liegt hier ein Sonderfall vor, weil das zwei Messungen desselben Konstrukts zu verschiedenen Zeitpunkten ist. Dort kann man m.E. bereits theoretisch nicht von diskriminanter Validität ausgehen, da es sich eben nicht um die Messung zweier verschiedener Konstrukte handelt, sondern um die Messung des gleichen Konstrukts zu verschiedenen Zeitpunkten.
Die HTMT-Werte für unterschiedliche Konstrukte (indus-dem60, indus-dem65) liegen weit unter dem Cut-Off-Wert von .85, so dass hier diskriminante Validität vorliegt.
Zusätzlich können wir die Modellschätzung noch bootstrappen, um so auch Bootstrap Konfidenzintervalle für HTMT zu erhalten. Um ein einseitiges 95%-Konfidenzintervall zu erhalten, ruft man ein 90%-KI auf und betrachtet nur die resultierende Obergrenze.
poldem_pls_boot <- bootstrap_model(poldem_pls, boot = 10000) summary(poldem_pls_boot, alpha = 0.10)
Als Teil des Ergebnisses erhalten wir:
Bootstrapped HTMT:
Original Est. Bootstrap Mean Bootstrap SD 5% CI 95% CI
indus -> dem60 0.434 0.434 0.117 0.229 0.628
indus -> dem65 0.556 0.552 0.109 0.374 0.711
dem60 -> dem65 0.982 0.982 0.028 0.931 1.027
Wir sehen, dass mit Ausnahme des Verhältnisses dem60-dem65 die Konfidenzintervalle in den letzten beiden Spalten die 1 nicht umschließen.
Wir können also von hinreichender diskriminanter Validität ausgehen.
3. Formatives Messmodell beurteilen
Um die Güte eines formativ spezifizierten Messmodells mit partial least squares (PLS) SEM zu beurteilen, prüft man vier verschiedene Bereiche:
- Inhaltsvalidität
- Konvergente Validität
- Keine hohe Kollinearität
- Höhe und Signifikanz formativer Indikatoren
Die nachfolgenden Empfehlungen zur Prüfung dieser drei Bereiche beruhen vor allem auf Hair et al. (2019).
3.1 Inhaltsvalidität
Eine wesentliche Voraussetzung für ein gutes formatives Messmodell ist die Inhaltsvalidität. Alle relevanten Facetten des zu messenden Konstruktes müssen als Indikatorvariablen enthalten sein, um das formativ gemessene Konstrukt korrekt abbilden zu können. Das lässt sich nicht primär anhand von quantitativen Auswertungen prüfen, hier ist stattdessen ein gründliches qualitatives Vorgehen gefordert.
3.2 Konvergente Validität
Die konvergente Validität eines formativ gemessenen Konstrukts kann man durch Korrelation mit einer reflektiven Messung abschätzen (Redundanzanalyse). Das setzt voraus, dass man neben den formativen Indikatoren auch eine reflektive Messung des gleichen Konstrukts vorgenommen hat, z.B. mit einem für das Konstrukt repräsentativen Single Item.
Dann ermittelt man den Pfad eines einfachen Modells, bei dem das formativ gemessene Konstrukt der Prädiktor und das reflektiv gemessene Konstrukt (z.B. mit einem Single-Item) das Kriterium ist. Ein standardisierter Pfadkoeffizient von größer als .70 spricht hier für konvergente Validität.
3.3 Keine hohe Kollinearität
Die Indikatoren des formativ gemessenen Konstrukts sollten keine hohe Multikollinearität aufweisen. Dazu werden die Varianzinflationsfaktoren (VIF) betrachtet. Werte über 5 werden als problematisch angesehen, Werte zwischen 3 und 5 als möglicherweise problematisch. Idealerweise liegen alle VIF-Werte unter 3.
In R erhalten Sie diese Varianzinflationsfaktoren als Teil der Modellschätzung.
Aufruf: summary(poldem_pls_f)$validity
Hier erhalten wir u.a. Tabellen mit den VIF-Werten je Item und Konstrukt:
$vif_items
indus :
x1 x2 x3
5.141 6.712 3.714
dem60 :
y1 y2 y3 y4
2.537 2.182 2.002 2.849
dem65 :
y5 y6 y7 y8
2.046 2.408 2.486 3.116
In diesem Beispiel zeigt sich beim Konstrukt Industrialisierung (indus) eine möglicherweise problematische Multikollinearität zwischen verschiedenen Indikatoren, insbesondere bei x1 und x2.
3.4 Höhe und Signifikanz formativer Indikatoren
Hier werden pro Indikator bis zu drei Größen betrachtet: Gewicht, Signifikanz, Ladung
Im Idealfall sind alle äußeren Gewichte (also die Gewichte des Messmodells) signifikant, haben also einen p-Wert unter .05 bzw. weisen ein 95% Konfidenzintervall auf, das die Null nicht einschließt. Dann gelten sie als relativ relevant und verbleiben im Modell.
Wenn ein oder mehrere äußere Gewichte nicht signifikant sind, dann betrachtet man noch die Ladung. Wenn in diesem Fall die Ladung über .50 liegt und signifikant ist, sind die Gewichte als absolut relevant anzusehen und verbleiben im Modell. Wenn auch das nicht der Fall ist, ist ein Verzicht auf den betreffenden Indikator in Erwägung zu ziehen, wobei jedoch auch inhaltliche und theoretische Aspekte eine Rolle spielen sollten.
Um die Signifikanz von Gewichten und Ladungen des Modells zu beurteilen, benötigen wir das Ergebnis des Bootstrappings für die Schätzung. Im o.g. Basistutorial hatten wir hier das Objekt poldem_pls_boot_f erhalten.
Aufruf: summary(poldem_pls_boot_f)
Jetzt erhalten wir zum einen die äußeren Gewichte mit Konfidenzintervallen:
Bootstrapped Weights:
Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI 97.5% CI
x1 -> indus 0.809 0.732 0.454 1.782 -0.255 1.523
x2 -> indus 0.342 0.364 0.515 0.664 -0.593 1.359
x3 -> indus -0.155 -0.132 0.332 -0.467 -0.813 0.475
y1 -> dem60 0.450 0.432 0.142 3.178 0.114 0.680
y2 -> dem60 -0.000 0.004 0.153 -0.002 -0.277 0.328
y3 -> dem60 0.085 0.092 0.119 0.716 -0.119 0.333
y4 -> dem60 0.569 0.565 0.134 4.249 0.304 0.820
y5 -> dem65 0.461 0.431 0.126 3.647 0.184 0.684
y6 -> dem65 0.161 0.171 0.122 1.320 -0.050 0.406
y7 -> dem65 0.202 0.210 0.138 1.462 -0.050 0.467
y8 -> dem65 0.328 0.327 0.151 2.169 0.061 0.657
Wir sehen hier, dass die Gewichte für folgende Indikatoren signifikant sind (Konfidenzintervall enthält nicht die Null): y1, y4, y5, y8.
Für die anderen Gewichte müssen wir jetzt noch die Höhe der Ladungen und deren Signifikanz bestimmen, auch diese Tabelle erhalten wir mit dem o.g. Aufruf der Summary-Funktion.
Bootstrapped Loadings:
Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI 97.5% CI
x1 -> indus 0.991 0.954 0.058 17.117 0.814 0.999
x2 -> indus 0.934 0.906 0.079 11.826 0.719 0.996
x3 -> indus 0.783 0.763 0.115 6.807 0.479 0.945
y1 -> dem60 0.902 0.887 0.045 20.009 0.788 0.954
y2 -> dem60 0.719 0.709 0.092 7.828 0.513 0.882
y3 -> dem60 0.737 0.726 0.084 8.815 0.544 0.870
y4 -> dem60 0.933 0.922 0.037 25.157 0.837 0.983
y5 -> dem65 0.895 0.877 0.054 16.553 0.741 0.960
y6 -> dem65 0.791 0.785 0.070 11.360 0.641 0.906
y7 -> dem65 0.846 0.844 0.052 16.281 0.734 0.931
y8 -> dem65 0.883 0.879 0.052 17.115 0.761 0.958
Alle Ladungen (Original Est.) sind über .50, und alle Ladungen sind signifikant (Konfidenzintervalle schließen die Null nicht ein). Damit können also alle Indikatoren im Modell verbleiben.
4. Strukturmodell beurteilen
Um die Güte des Strukturmodells bei Partial Least Squares SEM mit R (seminr Package) zu beurteilen, betrachtet man insbesondere folgende Bereiche:
- Kollinearität zwischen den latenten Variablen
- Varianzerklärung für die Kriteriumsvariablen
- Signifikanz und Relevanz der Strukturpfade
- Prognosegüte
Die folgenden Ausführungen basieren auf der oben erzielten Modellschätzung poldem_pls_f (also einer Schätzung mit formativen Messmodellen).
4.1 Keine starke Multikollinearität
Zur Überprüfung möglicher Multikollinearität auf der Ebene der Konstrukte können wir die VIF-Werte hier anfordern:
summary(poldem_pls_f)$vif_antecedents
Im Beispiel erhalten wir als Resultat dieses Aufrufs:
dem60 :
indus
.
dem65 :
indus dem60
1.28 1.28
Für die Vorhersage von dem60 gibt es keinen VIF, weil dort nur ein latenter Prädiktor im Modell ist und Multikollinearität erst bei mehreren Prädiktoren für eine Kriteriumsvariable auftreten kann. Für dem65 erhalten wir als VIF-Werte 1.28 und 1.28. Diese liegen deutlich unter den Cut-off-Werten von 5.0 bzw. idealerweise 3.0, so dass hier keine problematische Multikollinearität zwischen den Konstrukten vorliegt.
4.2 R² - Varianzaufklärung
Das R² für die verschiedenen Kriteriumsvariablen erhalten wir als Teil der Modell-Summary:
summary(poldem_pls_f)
Als Ergebnis erhalten wir:
Path Coefficients:
dem60 dem65
R^2 0.219 0.771
AdjR^2 0.208 0.765
indus 0.468 0.193
dem60 . 0.771
Das Modell erklärt also 21.9% der Varianz von dem60 und 77.1% der Varianz von dem65. Nach Hair et al. (2019) sind R²-Werte von .75 substantiell, von .50 moderat und von .25 schwach. Werte über .90 zeigen typischerweise einen Overfit des Modells an.
Allerdings sind diese Werte auch abhängig vom jeweiligen Forschungsgebiet und können nicht zwingend verallgemeinert werden. Hier sollten Sie zum Vergleich also auch typische R²-Werte Ihres Fachgebiets heranziehen.
Außer dem R² wird in der nachfolgenden Zeile auch noch das adjustierte R² angezeigt (AdjR^2). Während das R² die Varianzaufklärung angibt, kann das adjustierte R² für den Vergleich verschiedener Modelle verwendet werden, weil es neben der Varianzaufklärung auch die Anzahl der Prädiktoren mit berücksichtigt. Da wir hier nicht mehrere Modelle miteinander vergleichen, ist es für unsere Modellevaluation weniger relevant.
Neben der Varianzaufklärung insgesamt betrachtet man häufig noch f². Das zeigt an, welchen Einfluss der Ausschluss eines Prädiktors für die Varianzaufklärung hätte, wobei diese Kennzahl häufig keine Zusatzinformation gegenüber dem Vergleich der (standardisierten) Pfadkoeffizienten bietet.
summary(poldem_pls_f)$fSquare
Als Ergebnis erhalten wir:
indus dem60 dem65
indus 0.000 0.280 0.106
dem60 0.000 0.000 1.814
dem65 0.000 0.000 0.000
Nach Cohen (1992) sind die Cut-off-Werte für schwache, mittlere und große Effekte 0.02, 0.15 und 0.35.
4.3 Signifikanz und Relevanz der Strukturpfade
Um die Signifikanz der Strukturpfade zu prüfen, benötigen wir das Ergebnis der Bootstrap-Schätzung (siehe Basismodul).
summary(poldem_pls_boot_f)$bootstrapped_paths
Für die Beispieldaten ergibt sich:
Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI 97.5% CI
indus -> dem60 0.468 0.499 0.091 5.113 0.329 0.663
indus -> dem65 0.193 0.185 0.080 2.432 0.038 0.340
dem60 -> dem65 0.771 0.775 0.066 11.759 0.643 0.879
Das 95% Konfidenzintervall (letzten beiden Spalten) schließt für alle drei untersuchten Pfade die Null nicht mit ein (sowohl die Untergrenze als auch die Obergrenze haben das gleiche Vorzeichen), sie sind also signifikant.
Die Pfadkoeffizienten liegen typischerweise zwischen -1 und +1, wobei Werte nahe an diesen Grenzen sehr starke Effekte repräsentieren. Gerade bei großen Stichproben sollte man sich nicht nur auf die Signifikanz (Konfidenzintervall) verlassen, da dann selbst kleine und praktisch irrelevante Effekte signifikant werden können.
4.4 Prognosegüte
Zur Bewertung der Prognosegüte wird häufig das Gütemaß Q² herangezogen. Dies ist jedoch in seminr nicht verfügbar, weil es nach Einschätzung von N. Danks (Mitautor von seminr) nicht mehr empfohlen wird (Futaahy, 2021). Stattdessen wird die Funktion PLSpredict bevorzugt.
Diese Funktion führt eine Kreuzvalidierung durch. Dabei wird nur für einen Teil der Daten das PLS SEM Modell geschätzt und mit den verbleibenden Daten wird dann die Prognosegüte der Schätzung beurteilt. Technisch gesprochen führt man in der Regel eine k-fache Kreuzvalidierung durch: Die Daten werden zufällig in k gleich große Teilmengen aufgeteilt und es werden jeweils k-1 der Teilmengen für die Schätzung und die verbleibende Teilmenge für die Gütebeurteilung herangezogen, wobei jeder der Teilmengen einmal für die Gütebeurteilung genutzt wird. Häufig nutzt man eine 10-fache Kreuzvalidierung (unten im R-Code Parameter noFolds). Da die Kreuzvalidierung auch zufallsabhängig ist, wiederholt man diese ggf. mehrfach (hier 10 mal, im -Code Parameter reps).
Hier ist der Code für diese Kreuzvalidierung:
# Prognose mit Kreuzvalidierung
predict_poldem <- predict_pls(
model = poldem_pls_f,
technique = predict_DA,
noFolds = 10,
reps = 10)
# Ergebnis der Kreuvalidierung
predict_poldem_sum <- summary(predict_poldem)
Zunächst prüft man die Fehlerverteilung für die Indikatoren des Schlüsselkonstrukts (in unserem Beispiel sind das die Indikatoren y5 – y8 für Demokratie 1965).
# Fehlerverteilung der Indikatoren des Schlüsselkonstrukts
plot(predict_poldem_sum, indicator="y5")
plot(predict_poldem_sum, indicator="y6")
plot(predict_poldem_sum, indicator="y7")
plot(predict_poldem_sum, indicator="y8")
Wenn diese Plots im Wesentlichen symmetrisch sind, dann verwendet man für die Beurteilung der Vorhersage das Maß RMSE (root mean squared error), bei stark assymetrischen Verteilungen hingegen das Maß MAE (mean absolute error). Im vorliegenden Fall waren die Plots relativ symmetrisch (hier nicht abgedruckt), so dass RMSE zur Gütebeurteilung herangezogen wird.
Anzeige der Ergebnisse:
predict_poldem_sum
Nachfolgend der relevante Auszug aus den Ergebnissen, nämlich nur die out-of-sample metrics, und zwar für die Indikatoren des Schlüsselkonstrukts, hier y5 – y8:
PLS out-of-sample metrics:
y5 y6 y7 y8
RMSE 1.658 2.507 2.300 2.141
MAE 1.258 2.059 1.849 1.673
LM out-of-sample metrics:
y5 y6 y7 y8
RMSE 1.675 2.353 2.354 2.217
MAE 1.272 1.816 1.853 1.774
Aufgrund der Fehlerverteilung betrachten wir jeweils die Zeile RMSE. Dabei vergleichen wir die PLS-Schätzung der out-of-sample metrics mit einer einfachen LM-Schätzung. Für eine gute PLS SEM Vorhersagegüte sollten die Fehler bei PLS kleiner sein als bei LM.
Hier im Beispiel sehen wir, dass für PLS der RMSE für drei der vier Indikatoren (y5, y7, y8) kleiner ist als für LM, während er für einen Indikator (y6) größer ist.
Wie man sieht, kann sich das Ergebnis je nach Indikator auch unterscheiden. Eine Entscheidungsregel für diesen Fall ist:
- Wenn für alle Indikatoren die Fehlerwerte für PLS höher sind als für LM, dann hat das Modell keine Vorhersagequalität.
- Wenn für mehr als 50% der Indikatoren die Fehlerwerte für PLS höher sind als für LM, dann hat das Modell eine geringe Vorhersagequalität.
- Wenn für 50% oder weniger der Indikatoren die Fehlerwerte für PLS höher sind als für LM, dann hat das Modell eine mittlere Vorhersagequalität.
- Wenn für keinen der Indikatoren die Fehlerwerte für PLS höher sind als für LM, dann hat das Modell eine hohe Vorhersagequalität.
Das vorliegende Beispielmodell hat also eine mittlere Vorhersagequalität.
5. Literatur
Cohen, J. (1992). A power primer. Psychological Bulletin, 112(1), 155-159. https://doi.org/10.1037/0033-2909.112.1.155
Futaahy, M. (2021). I wonder how to calculate Q2 for the explanatory power of the model through SEMinR package. Facebook. https://www.facebook.com/groups/seminr/permalink/995070017723013/
Hair Jr, J. F., Hult, G. T. M., Ringle, C. M., Sarstedt, M., Danks, N. P., & Ray, S. (2021). Partial least squares structural equation modeling (PLS-SEM) using R: A workbook. Springer Nature.
Hair, J. F., Ringle, C. M., & Sarstedt, M. (2011). PLS-SEM: Indeed a silver bullet. Journal of Marketing Theory and Practice, 19(2), 139-152. https://doi.org/10.2753/MTP1069-6679190202
Hair, J. F., Risher, J. J., Sarstedt, M., & Ringle, C. M. (2019). When to use and how to report the results of PLS-SEM. European Business Review, 31(1), 2-24. https://doi.org/10.1108/EBR-11-2018-0203
Partial Least Squares Structural Equation Modeling (PLS-SEM) Using R. (n.d.). github. https://sem-in-r.github.io/seminr/