8.1 Beispiel: Messinvarianz der Dimension Technikakzeptanz

Bereits in den vorhergehenden Abschnitten haben wir uns ausführlich mit der Messung sowie der Modellierung der Technikakzeptanz vertraut gemacht.

Schauen wir uns erneut die Modellspezifikation an.

#Erneute Inspektion der vier Indikatorvariablen der latenten Variable der Technikakzeptanz
summary(daten_latente_konstrukte[,5:8])
##       ta1           ta2           ta3           ta4     
##  Min.   :1.0   Min.   :1.0   Min.   :1.0   Min.   :1.0  
##  1st Qu.:3.0   1st Qu.:2.0   1st Qu.:2.0   1st Qu.:2.0  
##  Median :4.0   Median :3.0   Median :2.0   Median :2.0  
##  Mean   :3.6   Mean   :3.1   Mean   :2.5   Mean   :2.5  
##  3rd Qu.:4.0   3rd Qu.:4.0   3rd Qu.:3.0   3rd Qu.:3.0  
##  Max.   :5.0   Max.   :5.0   Max.   :5.0   Max.   :5.0
#Aufrufen des Package lavaan
library(lavaan)
#Zudem laden wir das Paket semTools, da es hier eine Funktion measurementInvariance zur einfachen Begutachtung dieser gibt
library(semTools)

#Erstes Model mit allen vier Variablen, dass wie zuvor spezifiziert und geschätzt wird
model.ta1 <- 'TA  =~ ta1 + ta2 + ta3 + ta4'

fit.ta1 <- cfa(model.ta1, data=daten_latente_konstrukte, meanstructure = TRUE)

lavaan::summary(fit.ta1, fit.measures=TRUE, standardized = TRUE)
## lavaan 0.6-7 ended normally after 20 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of free parameters                         12
##                                                       
##   Number of observations                           455
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                20.628
##   Degrees of freedom                                 2
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                               785.050
##   Degrees of freedom                                 6
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.976
##   Tucker-Lewis Index (TLI)                       0.928
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -2429.394
##   Loglikelihood unrestricted model (H1)      -2419.080
##                                                       
##   Akaike (AIC)                                4882.789
##   Bayesian (BIC)                              4932.232
##   Sample-size adjusted Bayesian (BIC)         4894.148
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.143
##   90 Percent confidence interval - lower         0.091
##   90 Percent confidence interval - upper         0.202
##   P-value RMSEA <= 0.05                          0.002
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.026
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   TA =~                                                                 
##     ta1               1.000                               0.795    0.723
##     ta2               1.205    0.074   16.331    0.000    0.958    0.872
##     ta3               1.142    0.075   15.239    0.000    0.908    0.777
##     ta4               1.003    0.074   13.470    0.000    0.798    0.681
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .ta1               3.607    0.052   69.936    0.000    3.607    3.279
##    .ta2               3.149    0.052   61.112    0.000    3.149    2.865
##    .ta3               2.477    0.055   45.206    0.000    2.477    2.119
##    .ta4               2.488    0.055   45.328    0.000    2.488    2.125
##     TA                0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .ta1               0.578    0.047   12.395    0.000    0.578    0.478
##    .ta2               0.290    0.039    7.438    0.000    0.290    0.240
##    .ta3               0.542    0.048   11.201    0.000    0.542    0.397
##    .ta4               0.734    0.057   12.993    0.000    0.734    0.536
##     TA                0.632    0.075    8.393    0.000    1.000    1.000

Nun wollen wir einmal auf schauen, ob wir bei der Messung der Technikakzeptanz von Messinvarianz zwischen zwei Gruppen ausgehen können. Hierbei greifen wir auf die Aufteilung des Samples in zwei Gruppen anhand des Wissens über die EU und die entsprechenden Variable zurück (Auch hier erinnern sich sicher.).

Es gibt zunächst keine Vermutung, warum es mit Blick auf das Wissen über die EU Unterschiede bei der Messung der Technikakzeptanz zwischen Personen mit hohem Wissen über die EU und niedrigem Wissen geben sollte. Daher ist das Beispiel wunderbar geeignet, hier die Messinvarianz zu prüfen.

Getestet wird für die jeweiligen Stufen der Messinvarianz die Nullhypothese: “Es besteht (konfigurale/metrische/skalare) Messinvarianz zwischen den Gruppen.” Bei einem signifikanten Ergebnis, ist die Annahme der Messinvarianz abzulehnen.

8.1.1 Der schnelle Weg - Die Funktion ‘measurementInvariance’

Generell wird empfohlen die Schritte bei der Prüfung der Messinvarianz wie etwa in der lavaan-Dokumentation einzeln durchzuführen. Im Paket semTools gibt es jedoch eine Funktion, die diese Schritte abkürzt. Allerdings wird die Funktion in zukünftigen Paketen nicht mehr vorhanden sein. Auch daher, werden wir im nächsten Abschnitt noch einmal die einzelnen Schritte mit lavaan durchgehen.

Zunächst prüfen wir die Messinvarianz jedoch auf dem schnellen Wege.

Im nachfolgenden Code-Abschnitt wird auf die Funktion measurementInvariance() zurückgegriffen, wobei das spezifizierte Modell, der Datensatz, die Schätzung der Means and Intercepts sowie die Gruppierungsvariable bestimmt werden müssen.

#Test auf Messinvarianz
semTools::measurementInvariance(model = model.ta1,
                      data = daten_latente_konstrukte,
                      meanstructure = TRUE,
                      group = "wissen_dichotom")
## 
## Measurement invariance models:
## 
## Model 1 : fit.configural
## Model 2 : fit.loadings
## Model 3 : fit.intercepts
## Model 4 : fit.means
## 
## Chi-Squared Difference Test
## 
##                Df  AIC  BIC Chisq Chisq diff Df diff Pr(>Chisq)  
## fit.configural  4 4888 4987  20.8                                
## fit.loadings    7 4886 4972  24.7       3.88       3       0.27  
## fit.intercepts 10 4885 4960  30.4       5.70       3       0.13  
## fit.means      11 4887 4957  33.9       3.53       1       0.06 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Fit measures:
## 
##                 cfi rmsea cfi.delta rmsea.delta
## fit.configural 0.98 0.136        NA          NA
## fit.loadings   0.98 0.105     0.001       0.030
## fit.intercepts 0.97 0.095     0.004       0.011
## fit.means      0.97 0.096     0.003       0.001

Das Ergebnis zeigt, dass für keine Stufe der Messinvarianz signifikante Unterschiede bestehen. Das würde durch ein oder mehrere Sternchen im Output neben den Signifikanzwerten signalisiert. Auch die unter Fit measures aufgeführten Differenzen der inkrementellen Fitmaße des CFI und RMSEA sind als marginal zu bewerten.

8.1.2 Der lange, jedoch ausführliche Weg - Messinvarianz mit lavaan

Ein anderer (und nicht der einzige!) Weg, mit R auf Messinvarianz zu prüfen, wird nachfolgend dargelegt.

Konfigurale Messinvarianz

Zunächst wird hier auf konfigurale Invarianz geprüft, in dem das Modell. Die Auswertungscode sieht dabei ähnlich aus, wie bei der obigen Prüfung der Messinvarianz.

#Schätzung eines Modells ohne jegliche Gleichheitsrestriktionen, wobei zur Modellidentifikation die Mittelwerte in beiden Gruppen auf 0 festgesetzt werden.
fit.configural <- cfa(model = model.ta1,
                      data = daten_latente_konstrukte,
                      meanstructure = TRUE,
                      group = "wissen_dichotom")

lavaan::summary(fit.configural, fit.measures=TRUE)
## lavaan 0.6-7 ended normally after 30 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of free parameters                         24
##                                                       
##   Number of observations per group:                   
##     1                                              280
##     0                                              175
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                20.797
##   Degrees of freedom                                 4
##   P-value (Chi-square)                           0.000
##   Test statistic for each group:
##     1                                           12.643
##     0                                            8.155
## 
## Model Test Baseline Model:
## 
##   Test statistic                               781.099
##   Degrees of freedom                                12
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.978
##   Tucker-Lewis Index (TLI)                       0.934
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -2419.895
##   Loglikelihood unrestricted model (H1)      -2409.496
##                                                       
##   Akaike (AIC)                                4887.789
##   Bayesian (BIC)                              4986.676
##   Sample-size adjusted Bayesian (BIC)         4910.508
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.136
##   90 Percent confidence interval - lower         0.082
##   90 Percent confidence interval - upper         0.196
##   P-value RMSEA <= 0.05                          0.006
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.026
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## 
## Group 1 [1]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2               1.290    0.113   11.394    0.000
##     ta3               1.240    0.116   10.706    0.000
##     ta4               1.164    0.116    9.995    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               3.729    0.061   61.586    0.000
##    .ta2               3.207    0.063   50.840    0.000
##    .ta3               2.543    0.068   37.243    0.000
##    .ta4               2.529    0.070   36.235    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               0.545    0.055    9.870    0.000
##    .ta2               0.314    0.051    6.160    0.000
##    .ta3               0.566    0.064    8.817    0.000
##    .ta4               0.711    0.073    9.786    0.000
##     TA                0.481    0.080    6.045    0.000
## 
## 
## Group 2 [0]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2               1.133    0.097   11.738    0.000
##     ta3               1.058    0.097   10.871    0.000
##     ta4               0.860    0.097    8.876    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               3.411    0.091   37.579    0.000
##    .ta2               3.057    0.088   34.868    0.000
##    .ta3               2.371    0.091   26.098    0.000
##    .ta4               2.423    0.089   27.329    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               0.598    0.079    7.596    0.000
##    .ta2               0.260    0.060    4.335    0.000
##    .ta3               0.499    0.072    6.894    0.000
##    .ta4               0.751    0.090    8.366    0.000
##     TA                0.845    0.148    5.721    0.000
#Anpassungsgüte Modell Gruppe 1
fitMeasures(fit.configural0, c("chisq", "df", "pvalue","cfi"))
##  chisq     df pvalue    cfi 
##  8.155  2.000  0.017  0.982
#Anpassungsgüte Modell Gruppe 2
fitMeasures(fit.configural1, c("chisq", "df", "pvalue","cfi"))         
##  chisq     df pvalue    cfi 
## 12.643  2.000  0.002  0.975

Ein Vergleich der Anpassungsgüte des Modells, das jeweils für beide Gruppen geschätzt wurde, indiziert mit Blick auf den Wert für den CFI eine hohe Anpassungsgüte, auch wenn der strenge Chi-Quadrat-Test signifikant ausfällt.

Metrische Invarianz

In einem nächsten Schritt prüfen wir die metrische Messinvarianz, also ob die Parameterschätzer der Messgewichte sich zwischen den Gruppen unterscheiden.

Hierfür wird das Modell wie zuvor geschätzt, allerdings die Gleichheitsrestriktionen der Messgewicht mit dem Befehl group.equal = c("loadings") festgelegt.

#Gleichheitsrestriktionen für die Faktorladungen
fit.metric <- cfa(model = model.ta1,
                  data = daten_latente_konstrukte,
                  meanstructure = TRUE,
                  group = "wissen_dichotom",
                  group.equal = c("loadings"))

Der Blick auf die Modellzusammenfassung zeigt, dass die Messgewichte zwischen den beiden Gruppen gleichgesetzt wurden. Das erkennt man neben gleichen Werte bei den Estimates auch an den gleichen Labels (p2, p3, p4), die im Modell zugewiesen wurden.

lavaan::summary(fit.metric)
## lavaan 0.6-7 ended normally after 25 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of free parameters                         24
##   Number of equality constraints                     3
##                                                       
##   Number of observations per group:                   
##     1                                              280
##     0                                              175
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                24.681
##   Degrees of freedom                                 7
##   P-value (Chi-square)                           0.001
##   Test statistic for each group:
##     1                                           14.421
##     0                                           10.260
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## 
## Group 1 [1]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.219    0.075   16.231    0.000
##     ta3     (.p3.)    1.151    0.076   15.162    0.000
##     ta4     (.p4.)    1.013    0.076   13.373    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               3.729    0.062   60.128    0.000
##    .ta2               3.207    0.063   50.862    0.000
##    .ta3               2.543    0.068   37.277    0.000
##    .ta4               2.529    0.068   37.126    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               0.531    0.055    9.707    0.000
##    .ta2               0.302    0.048    6.360    0.000
##    .ta3               0.580    0.063    9.232    0.000
##    .ta4               0.739    0.072   10.302    0.000
##     TA                0.545    0.073    7.429    0.000
## 
## 
## Group 2 [0]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.219    0.075   16.231    0.000
##     ta3     (.p3.)    1.151    0.076   15.162    0.000
##     ta4     (.p4.)    1.013    0.076   13.373    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               3.411    0.088   38.874    0.000
##    .ta2               3.057    0.088   34.850    0.000
##    .ta3               2.371    0.091   26.069    0.000
##    .ta4               2.423    0.092   26.362    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               0.623    0.078    8.020    0.000
##    .ta2               0.269    0.057    4.724    0.000
##    .ta3               0.488    0.070    6.947    0.000
##    .ta4               0.734    0.090    8.197    0.000
##     TA                0.725    0.111    6.526    0.000

Um nun die beiden Modelle gegenüberzustellen wird ein Chi-Quadrat-Differenztest mit der Funktion anova() durchgeführt.

#Modellvergleich zwischen dem Modell 
anova(fit.configural, fit.metric)
## Chi-Squared Difference Test
## 
##                Df  AIC  BIC Chisq Chisq diff Df diff Pr(>Chisq)
## fit.configural  4 4888 4987  20.8                              
## fit.metric      7 4886 4972  24.7       3.88       3       0.27

Es zeigt sich, dass das Modell mit den keine signifikant schlechtere Anpassungsgüte aufweist. Es kann mithin von Messinvarianz zwischen den Gruppen ausgegangen werden. Diese Werte können Sie auch einmal mit dem vorigen Abschnitt vergleichen.

Skalare Invarianz

Für die skalare Invarianz werden die Gleichheitsrestriktionen für die Achsenabschnitte (‘Intercepts’) der Indikatoren mit dem Befehl group.equal = c("intercepts") festgelegt, wobei man einfach den vorigen Befehl zur Gleichheitsrestriktion bei der metrischen Invarianz ergänzt (siehe im nachfolgenden Codeabschnitt).

Nach der Durchführung finden sich für die Achsenabschnitte in beiden Gruppen die gleichen Labels (p10 - p13) und gleiche Werte.

fit.scalar <- cfa(model = model.ta1,
                  data = daten_latente_konstrukte,
                  meanstructure = TRUE,
                  group = "wissen_dichotom",
                  group.equal = c("loadings", "intercepts"))

lavaan::summary(fit.scalar)
## lavaan 0.6-7 ended normally after 35 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of free parameters                         25
##   Number of equality constraints                     7
##                                                       
##   Number of observations per group:                   
##     1                                              280
##     0                                              175
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                30.381
##   Degrees of freedom                                10
##   P-value (Chi-square)                           0.001
##   Test statistic for each group:
##     1                                           16.766
##     0                                           13.615
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## 
## Group 1 [1]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.204    0.074   16.333    0.000
##     ta3     (.p3.)    1.141    0.075   15.269    0.000
##     ta4     (.p4.)    1.001    0.075   13.433    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.10.)    3.674    0.058   63.544    0.000
##    .ta2     (.11.)    3.224    0.061   52.758    0.000
##    .ta3     (.12.)    2.547    0.063   40.347    0.000
##    .ta4     (.13.)    2.549    0.061   41.627    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               0.534    0.055    9.672    0.000
##    .ta2               0.305    0.047    6.424    0.000
##    .ta3               0.579    0.063    9.222    0.000
##    .ta4               0.739    0.072   10.309    0.000
##     TA                0.555    0.074    7.461    0.000
## 
## 
## Group 2 [0]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.204    0.074   16.333    0.000
##     ta3     (.p3.)    1.141    0.075   15.269    0.000
##     ta4     (.p4.)    1.001    0.075   13.433    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.10.)    3.674    0.058   63.544    0.000
##    .ta2     (.11.)    3.224    0.061   52.758    0.000
##    .ta3     (.12.)    2.547    0.063   40.347    0.000
##    .ta4     (.13.)    2.549    0.061   41.627    0.000
##     TA               -0.159    0.084   -1.878    0.060
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1               0.634    0.079    8.011    0.000
##    .ta2               0.273    0.057    4.784    0.000
##    .ta3               0.485    0.070    6.920    0.000
##    .ta4               0.734    0.090    8.197    0.000
##     TA                0.738    0.113    6.543    0.000

Ein erneuter Chi-Quadrat-Differenztest zeigt, ob das Modell mit den zusätzlichen Restriktionen (loadings und intercepts) im Vergleich mit dem Modell ohne diese Gleichheitsrestriktionen eine signifikant schlechtere Anpassungsgüte hat oder nicht.

anova(fit.configural, fit.metric, fit.scalar)
## Chi-Squared Difference Test
## 
##                Df  AIC  BIC Chisq Chisq diff Df diff Pr(>Chisq)
## fit.configural  4 4888 4987  20.8                              
## fit.metric      7 4886 4972  24.7       3.88       3       0.27
## fit.scalar     10 4885 4960  30.4       5.70       3       0.13

Das Ergebnis zeigt, dass dem nicht so ist, also mithin auch von skalarer Invarianz ausgegangen werden kann.

Messfehlerinvarianz

Als letztes besteht noch die Möglichkeit auf strikte faktorielle Invarianz zu prüfen (Weiber and Mühlhaus 2014, S. 301). Hier wird getested, ob eine Invarianz zwischen den Messfehlern in den Gruppen besteht.

fit.residual <- cfa(model = model.ta1,
                  data = daten_latente_konstrukte,
                  meanstructure = TRUE,
                  group = "wissen_dichotom",
                  group.equal = c("loadings", "intercepts", "residuals"))

lavaan::summary(fit.residual)
## lavaan 0.6-7 ended normally after 27 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of free parameters                         25
##   Number of equality constraints                    11
##                                                       
##   Number of observations per group:                   
##     1                                              280
##     0                                              175
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                32.857
##   Degrees of freedom                                14
##   P-value (Chi-square)                           0.003
##   Test statistic for each group:
##     1                                           18.194
##     0                                           14.662
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## 
## Group 1 [1]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.199    0.073   16.431    0.000
##     ta3     (.p3.)    1.136    0.074   15.309    0.000
##     ta4     (.p4.)    0.997    0.074   13.490    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.10.)    3.668    0.058   62.837    0.000
##    .ta2     (.11.)    3.224    0.061   52.830    0.000
##    .ta3     (.12.)    2.547    0.063   40.448    0.000
##    .ta4     (.13.)    2.550    0.061   41.586    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.p5.)    0.572    0.046   12.351    0.000
##    .ta2     (.p6.)    0.292    0.039    7.522    0.000
##    .ta3     (.p7.)    0.543    0.048   11.231    0.000
##    .ta4     (.p8.)    0.737    0.057   13.019    0.000
##     TA                0.563    0.075    7.458    0.000
## 
## 
## Group 2 [0]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.199    0.073   16.431    0.000
##     ta3     (.p3.)    1.136    0.074   15.309    0.000
##     ta4     (.p4.)    0.997    0.074   13.490    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.10.)    3.668    0.058   62.837    0.000
##    .ta2     (.11.)    3.224    0.061   52.830    0.000
##    .ta3     (.12.)    2.547    0.063   40.448    0.000
##    .ta4     (.13.)    2.550    0.061   41.586    0.000
##     TA               -0.161    0.085   -1.896    0.058
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.p5.)    0.572    0.046   12.351    0.000
##    .ta2     (.p6.)    0.292    0.039    7.522    0.000
##    .ta3     (.p7.)    0.543    0.048   11.231    0.000
##    .ta4     (.p8.)    0.737    0.057   13.019    0.000
##     TA                0.742    0.112    6.621    0.000

Ein erneuter Chi-Quadrat-Differenztest zeigt, ob das Modell mit den zusätzlichen Restriktionen (loadings, intercepts sowie residuals) im Vergleich mit dem Modell ohne diese Gleichheitsrestriktionen eine signifikant schlechtere Anpassungsgüte hat oder nicht.

anova(fit.configural, fit.metric, fit.scalar, fit.residual)
## Chi-Squared Difference Test
## 
##                Df  AIC  BIC Chisq Chisq diff Df diff Pr(>Chisq)
## fit.configural  4 4888 4987  20.8                              
## fit.metric      7 4886 4972  24.7       3.88       3       0.27
## fit.scalar     10 4885 4960  30.4       5.70       3       0.13
## fit.residual   14 4880 4938  32.9       2.48       4       0.65

Das Ergebnis indiziert, dass von Messfehlerinvarianz ausgegangen werden kann.

Invarianz der Mittelwerte der latenten Variablen

Man kann nun auch ein Modell schätzen lassen, in dem von Mittelwertgleichheit (Mittelwertinvarianz) zwischen den Gruppen ausgegangen wird. Dieser Test greift jedoch der eigentlich Prüfung der Mittelwerte im folgenden Abschnitt vorweg, weshalb hier lediglich Code und Ergebnisse berichtet werden, um nachfolgend einen direkten Vergleich der Ergebnisse zu haben.

fit.means <- cfa(model = model.ta1,
                  data = daten_latente_konstrukte,
                  meanstructure = TRUE,
                  group = "wissen_dichotom",
                  group.equal = c("loadings", "intercepts", "residuals", "means"))

lavaan::summary(fit.means)
## lavaan 0.6-7 ended normally after 26 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of free parameters                         24
##   Number of equality constraints                    11
##                                                       
##   Number of observations per group:                   
##     1                                              280
##     0                                              175
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                36.454
##   Degrees of freedom                                15
##   P-value (Chi-square)                           0.002
##   Test statistic for each group:
##     1                                           19.376
##     0                                           17.078
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## 
## Group 1 [1]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.202    0.073   16.398    0.000
##     ta3     (.p3.)    1.138    0.074   15.279    0.000
##     ta4     (.p4.)    0.999    0.074   13.476    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.10.)    3.616    0.051   70.421    0.000
##    .ta2     (.11.)    3.160    0.051   61.717    0.000
##    .ta3     (.12.)    2.487    0.055   45.626    0.000
##    .ta4     (.13.)    2.497    0.055   45.670    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.p5.)    0.575    0.046   12.375    0.000
##    .ta2     (.p6.)    0.290    0.039    7.460    0.000
##    .ta3     (.p7.)    0.543    0.048   11.231    0.000
##    .ta4     (.p8.)    0.737    0.057   13.017    0.000
##     TA                0.564    0.076    7.447    0.000
## 
## 
## Group 2 [0]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   TA =~                                               
##     ta1               1.000                           
##     ta2     (.p2.)    1.202    0.073   16.398    0.000
##     ta3     (.p3.)    1.138    0.074   15.279    0.000
##     ta4     (.p4.)    0.999    0.074   13.476    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.10.)    3.616    0.051   70.421    0.000
##    .ta2     (.11.)    3.160    0.051   61.717    0.000
##    .ta3     (.12.)    2.487    0.055   45.626    0.000
##    .ta4     (.13.)    2.497    0.055   45.670    0.000
##     TA                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .ta1     (.p5.)    0.575    0.046   12.375    0.000
##    .ta2     (.p6.)    0.290    0.039    7.460    0.000
##    .ta3     (.p7.)    0.543    0.048   11.231    0.000
##    .ta4     (.p8.)    0.737    0.057   13.017    0.000
##     TA                0.750    0.113    6.618    0.000
anova(fit.configural, fit.metric, fit.scalar, fit.residual, fit.means)
## Chi-Squared Difference Test
## 
##                Df  AIC  BIC Chisq Chisq diff Df diff Pr(>Chisq)  
## fit.configural  4 4888 4987  20.8                                
## fit.metric      7 4886 4972  24.7       3.88       3      0.274  
## fit.scalar     10 4885 4960  30.4       5.70       3      0.127  
## fit.residual   14 4880 4938  32.9       2.48       4      0.649  
## fit.means      15 4881 4935  36.5       3.60       1      0.058 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1