In the previous presentation “Factor Analysis (FA) III: Structural Equation Modeling (SEM)”, the three-factor model with the added correlated error term fitted significantly better than the original four-factor model.
lavaan 0.6-12 ended normally after 114 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 28
Number of observations 300
Model Test User Model:
Test statistic 212.813
Degrees of freedom 50
P-value (Chi-square) 0.000
Model Test Baseline Model:
Test statistic 1042.916
Degrees of freedom 66
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.833
Tucker-Lewis Index (TLI) 0.780
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -9929.572
Loglikelihood unrestricted model (H1) -9823.166
Akaike (AIC) 19915.144
Bayesian (BIC) 20018.850
Sample-size adjusted Bayesian (BIC) 19930.051
Root Mean Square Error of Approximation:
RMSEA 0.104
90 Percent confidence interval - lower 0.090
90 Percent confidence interval - upper 0.119
P-value RMSEA <= 0.05 0.000
Standardized Root Mean Square Residual:
SRMR 0.071
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|)
verbalcomp =~
vocab 1.000
simil 0.361 0.035 10.184 0.000
inform 0.525 0.048 10.857 0.000
compreh 0.334 0.036 9.349 0.000
workingmemory =~
arith 1.000
digspan 0.857 0.149 5.768 0.000
lnseq 0.193 0.104 1.850 0.064
performance =~
piccomp 1.000
block 3.737 0.390 9.581 0.000
matrixreason 0.843 0.118 7.176 0.000
digsym 1.615 0.508 3.181 0.001
symbolsearch 1.875 0.203 9.218 0.000
Std.lv Std.all
5.888 0.824
2.125 0.664
3.090 0.706
1.965 0.547
2.565 0.857
2.199 0.558
0.495 0.123
1.515 0.650
5.662 0.734
1.278 0.499
2.446 0.208
2.841 0.688
Covariances:
Estimate Std.Err z-value P(>|z|)
.simil ~~
.inform -3.738 0.606 -6.169 0.000
verbalcomp ~~
workingmemory 6.278 1.181 5.315 0.000
performance 5.654 0.859 6.583 0.000
workingmemory ~~
performance 2.237 0.363 6.172 0.000
Std.lv Std.all
-3.738 -0.503
0.416 0.416
0.634 0.634
0.576 0.576
Variances:
Estimate Std.Err z-value P(>|z|)
.vocab 16.365 2.375 6.892 0.000
.simil 5.734 0.610 9.399 0.000
.inform 9.635 1.095 8.801 0.000
.compreh 9.026 0.791 11.413 0.000
.arith 2.380 1.037 2.294 0.022
.digspan 10.715 1.154 9.282 0.000
.lnseq 15.830 1.298 12.193 0.000
.piccomp 3.143 0.316 9.937 0.000
.block 27.457 3.220 8.527 0.000
.matrixreason 4.921 0.439 11.216 0.000
.digsym 132.218 10.920 12.108 0.000
.symbolsearch 8.996 0.958 9.393 0.000
verbalcomp 34.667 4.408 7.865 0.000
workingmemory 6.579 1.239 5.309 0.000
performance 2.296 0.407 5.643 0.000
Std.lv Std.all
16.365 0.321
5.734 0.560
9.635 0.502
9.026 0.700
2.380 0.266
10.715 0.689
15.830 0.985
3.143 0.578
27.457 0.461
4.921 0.751
132.218 0.957
8.996 0.527
1.000 1.000
1.000 1.000
1.000 1.000
R-Square:
Estimate
vocab 0.679
simil 0.440
inform 0.498
compreh 0.300
arith 0.734
digspan 0.311
lnseq 0.015
piccomp 0.422
block 0.539
matrixreason 0.249
digsym 0.043
symbolsearch 0.473
The second layer or level of a model is sometimes called the structural model, which is the relationship between the latent variables. So there is an overall IQ factor predicting the latent scores on verbal comprehension, working memory, and perceptual organization.
By using a hierarchical analysis, you are suggesting that the correlations between these (latent) variables existed because they are all related to a separate underlying construct (at a higher level). Therefore, general IQ is the reason for the subscores on the WAIS-III IQ Scale (Wechsler Adult Intelligence Scale version III).
wais.model.h <- "verbalcomp =~ vocab + simil + inform + compreh
workingmemory =~ arith + digspan + lnseq
performance =~ piccomp + block + matrixreason + digsym + symbolsearch
simil ~~ inform
generalIQ =~ verbalcomp + workingmemory + performance"
wais.fit.h <- cfa(wais.model.h, data = IQdata)Usually, a change in model specification results in a change in fit indices. In this example, adding the second level of latent variables does not change the fit indices because your are simply shifting the parameters from covariances to loadings.
summary(wais.fit.h, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE)lavaan 0.6-12 ended normally after 115 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 28
Number of observations 300
Model Test User Model:
Test statistic 212.813
Degrees of freedom 50
P-value (Chi-square) 0.000
Model Test Baseline Model:
Test statistic 1042.916
Degrees of freedom 66
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.833
Tucker-Lewis Index (TLI) 0.780
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -9929.572
Loglikelihood unrestricted model (H1) -9823.166
Akaike (AIC) 19915.144
Bayesian (BIC) 20018.850
Sample-size adjusted Bayesian (BIC) 19930.051
Root Mean Square Error of Approximation:
RMSEA 0.104
90 Percent confidence interval - lower 0.090
90 Percent confidence interval - upper 0.119
P-value RMSEA <= 0.05 0.000
Standardized Root Mean Square Residual:
SRMR 0.071
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|)
verbalcomp =~
vocab 1.000
simil 0.361 0.035 10.184 0.000
inform 0.525 0.048 10.857 0.000
compreh 0.334 0.036 9.349 0.000
workingmemory =~
arith 1.000
digspan 0.857 0.149 5.768 0.000
lnseq 0.193 0.104 1.850 0.064
performance =~
piccomp 1.000
block 3.737 0.390 9.581 0.000
matrixreason 0.843 0.118 7.176 0.000
digsym 1.615 0.508 3.181 0.001
symbolsearch 1.875 0.203 9.218 0.000
generalIQ =~
verbalcomp 1.000
workingmemory 0.396 0.060 6.635 0.000
performance 0.356 0.062 5.713 0.000
Std.lv Std.all
5.888 0.824
2.125 0.664
3.090 0.706
1.965 0.547
2.565 0.857
2.199 0.558
0.495 0.123
1.515 0.650
5.662 0.734
1.278 0.499
2.446 0.208
2.841 0.688
0.676 0.676
0.615 0.615
0.937 0.937
Covariances:
Estimate Std.Err z-value P(>|z|)
.simil ~~
.inform -3.738 0.606 -6.169 0.000
Std.lv Std.all
-3.738 -0.503
Variances:
Estimate Std.Err z-value P(>|z|)
.vocab 16.365 2.375 6.892 0.000
.simil 5.734 0.610 9.399 0.000
.inform 9.635 1.095 8.801 0.000
.compreh 9.026 0.791 11.413 0.000
.arith 2.380 1.037 2.294 0.022
.digspan 10.715 1.154 9.282 0.000
.lnseq 15.830 1.298 12.193 0.000
.piccomp 3.143 0.316 9.937 0.000
.block 27.457 3.220 8.527 0.000
.matrixreason 4.921 0.439 11.216 0.000
.digsym 132.217 10.920 12.108 0.000
.symbolsearch 8.996 0.958 9.393 0.000
.verbalcomp 18.804 3.350 5.612 0.000
.workingmemory 4.095 1.096 3.734 0.000
.performance 0.281 0.297 0.946 0.344
generalIQ 15.863 3.715 4.270 0.000
Std.lv Std.all
16.365 0.321
5.734 0.560
9.635 0.502
9.026 0.700
2.380 0.266
10.715 0.689
15.830 0.985
3.143 0.578
27.457 0.461
4.921 0.751
132.217 0.957
8.996 0.527
0.542 0.542
0.622 0.622
0.122 0.122
1.000 1.000
R-Square:
Estimate
vocab 0.679
simil 0.440
inform 0.498
compreh 0.300
arith 0.734
digspan 0.311
lnseq 0.015
piccomp 0.422
block 0.539
matrixreason 0.249
digsym 0.043
symbolsearch 0.473
verbalcomp 0.458
workingmemory 0.378
performance 0.878
A likelihood ratio test tells you whether the models fit significantly differently. As expected, there is no significant result: the fit statistics are exactly the same.
Chi-Squared Difference Test
Df AIC BIC Chisq Chisq diff Df diff
wais.fit1.1 50 19915 20019 212.81
wais.fit.h 50 19915 20019 212.81 -6.5249e-09 0
Pr(>Chisq)
wais.fit1.1
wais.fit.h
As expected, there is no difference: the fit statistics are exactly the same.
cfi tli aic ecvi rmsea srmr
0.833 0.780 19915.144 0.896 0.104 0.071