This also includes a reanalysis of Wang et al. (2021).
library(pacman); p_load(lavaan, psych, semPlot)
CONGO <- function(F1, F2) {
PHI = sum(F1*F2) / sqrt(sum(F1^2)*sum(F2^2))
return(PHI)}
CRITR <- function(n, alpha = .05) {
df <- n - 2; CRITT <- qt(alpha/2, df, lower.tail = F)
CRITR <- sqrt((CRITT^2)/((CRITT^2) + df ))
return(CRITR)}
NP <- function(N, S = 2) {
NP = 1-pnorm(qnorm(1-(N^(-6/5))/S))
return(NP)}
FITM <- c("chisq", "df", "nPar", "cfi", "rmsea", "rmsea.ci.lower", "rmsea.ci.upper", "aic", "bic")
NP(205); CRITR(205); CRITR(205, NP(205))
## [1] 0.0008411344
## [1] 0.1370811
## [1] 0.2314392
NP(215); CRITR(215); CRITR(215, NP(215))
## [1] 0.0007944084
## [1] 0.1338466
## [1] 0.2271178
#Buczylowsko, Petermann & Daseking (2020)
lowerBPD <- '
1
0.607 1
0.558 0.57 1
0.286 0.281 0.309 1
0.351 0.381 0.328 0.487 1
0.295 0.381 0.414 0.411 0.515 1
0.232 0.251 0.274 0.338 0.311 0.318 1
0.224 0.223 0.253 0.359 0.244 0.287 0.542 1
0.261 0.243 0.223 0.23 0.273 0.235 0.375 0.34 1
0.38 0.286 0.248 0.331 0.385 0.306 0.275 0.225 0.564 1
0.465 0.389 0.355 0.215 0.403 0.264 0.17 0.195 0.198 0.267 1
0.446 0.421 0.404 0.371 0.291 0.357 0.266 0.254 0.317 0.356 0.377 1
0.226 0.254 0.184 0.278 0.218 0.264 0.04 0.129 0.133 0.211 0.202 0.228 1
0.1 0.095 0.099 0.157 0.232 0.177 0.394 0.306 0.412 0.295 0.231 0.222 0.041 1
0.352 0.334 0.37 0.333 0.331 0.333 0.373 0.352 0.419 0.371 0.398 0.374 0.122 0.307 1'
lowerBPDPsy <- '
1
0.607 1
0.558 0.57 1
0.286 0.281 0.309 1
0.351 0.381 0.328 0.487 1
0.295 0.381 0.414 0.411 0.515 1
0.232 0.251 0.274 0.338 0.311 0.318 1
0.224 0.223 0.253 0.359 0.244 0.287 0.542 1
0.261 0.243 0.223 0.23 0.273 0.235 0.375 0.34 1
0.38 0.286 0.248 0.331 0.385 0.306 0.275 0.225 0.564 1'
lowerBPDExe <- '
1
0.377 1
0.202 0.228 1
0.231 0.222 0.041 1
0.398 0.374 0.122 0.307 1'
nBPD <- 205
BPD.cor = getCov(lowerBPD, names = c("SI", "VC", "IN", "MR", "DS", "AR", "BD", "VP", "SS", "CO", "LRF", "CAT", "JDG", "MAZ", "WGN"))
BPDPsy.cor = getCov(lowerBPDPsy, names = c("SI", "VC", "IN", "MR", "DS", "AR", "BD", "VP", "SS", "CO"))
BPDExe.cor = getCov(lowerBPDExe, names = c("LRF", "CAT", "JDG", "MAZ", "WGN"))
#Wang et al. (2021)
lowerWEA <- '
1
0.18 1
0.33 0.48 1
0.27 0.31 0.35 1
0.07 0.15 0.14 0.63 1
-0.03 0.1 0.1 0.19 0.24 1
0.16 0.15 0.08 0.21 0.22 0.3 1'
lowerWEAPsy <- '
1
0.63 1
0.19 0.24 1
0.21 0.22 0.3 1'
lowerWEAExe <- '
1
0.18 1
0.33 0.48 1'
nWEA <- 215
WEA.cor = getCov(lowerWEA, names = c("SCT1", "SCT2", "SCT3", "CST", "BPT", "CFT", "ART"))
WEAPsy.cor = getCov(lowerWEAPsy, names = c("CST", "BPT", "CFT", "ART"))
WEAExe.cor = getCov(lowerWEAExe, names = c("SCT1", "SCT2", "SCT3"))
fa.parallel(BPD.cor, n.obs = nBPD)
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Parallel analysis suggests that the number of factors = 3 and the number of components = 2
fa.parallel(BPDPsy.cor, n.obs = nBPD)
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : An
## ultra-Heywood case was detected. Examine the results carefully
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : An
## ultra-Heywood case was detected. Examine the results carefully
## Parallel analysis suggests that the number of factors = 4 and the number of components = 1
fa.parallel(BPDExe.cor, n.obs = nBPD)
## Parallel analysis suggests that the number of factors = 1 and the number of components = 1
faBPD1 <- fa(BPD.cor, n.obs = nBPD, nfactors = 1)
faBPD2 <- fa(BPD.cor, n.obs = nBPD, nfactors = 2)
## Loading required namespace: GPArotation
faBPD3 <- fa(BPD.cor, n.obs = nBPD, nfactors = 3)
faPsyBPD1 <- fa(BPDPsy.cor, n.obs = nBPD, nfactors = 1)
faPsyBPD2 <- fa(BPDPsy.cor, n.obs = nBPD, nfactors = 2)
faPsyBPD3 <- fa(BPDPsy.cor, n.obs = nBPD, nfactors = 3)
faPsyBPD4 <- fa(BPDPsy.cor, n.obs = nBPD, nfactors = 4)
faExeBPD <- fa(BPDExe.cor, n.obs = nBPD, nfactors = 1)
print(faBPD1$loadings)
##
## Loadings:
## MR1
## SI 0.638
## VC 0.628
## IN 0.613
## MR 0.565
## DS 0.619
## AR 0.593
## BD 0.528
## VP 0.496
## SS 0.535
## CO 0.579
## LRF 0.539
## CAT 0.612
## JDG 0.324
## MAZ 0.383
## WGN 0.620
##
## MR1
## SS loadings 4.678
## Proportion Var 0.312
print(faBPD2$loadings)
##
## Loadings:
## MR1 MR2
## SI 0.772
## VC 0.782
## IN 0.701
## MR 0.323 0.326
## DS 0.420 0.285
## AR 0.429 0.245
## BD 0.667
## VP 0.574
## SS 0.645
## CO 0.228 0.450
## LRF 0.509
## CAT 0.487 0.207
## JDG 0.346
## MAZ -0.153 0.647
## WGN 0.274 0.450
##
## MR1 MR2
## SS loadings 2.930 2.321
## Proportion Var 0.195 0.155
## Cumulative Var 0.195 0.350
print(faBPD3$loadings)
##
## Loadings:
## MR1 MR2 MR3
## SI 0.833
## VC 0.709 0.104
## IN 0.602 0.164
## MR 0.679
## DS 0.153 0.556
## AR 0.132 0.613
## BD -0.102 0.493 0.313
## VP 0.404 0.326
## SS 0.106 0.738
## CO 0.230 0.448
## LRF 0.485 0.114
## CAT 0.421 0.179 0.147
## JDG 0.200 0.266
## MAZ -0.103 0.620
## WGN 0.251 0.414 0.120
##
## MR1 MR2 MR3
## SS loadings 2.208 1.768 1.517
## Proportion Var 0.147 0.118 0.101
## Cumulative Var 0.147 0.265 0.366
print(faPsyBPD1$loadings)
##
## Loadings:
## MR1
## SI 0.625
## VC 0.634
## IN 0.622
## MR 0.578
## DS 0.635
## AR 0.612
## BD 0.538
## VP 0.497
## SS 0.507
## CO 0.565
##
## MR1
## SS loadings 3.404
## Proportion Var 0.340
print(faPsyBPD2$loadings)
##
## Loadings:
## MR2 MR1
## SI 0.741
## VC 0.800
## IN 0.700
## MR 0.495 0.152
## DS 0.417 0.291
## AR 0.375 0.308
## BD 0.697
## VP 0.651
## SS 0.580
## CO 0.483 0.150
##
## MR2 MR1
## SS loadings 2.040 1.916
## Proportion Var 0.204 0.192
## Cumulative Var 0.204 0.396
print(faPsyBPD3$loadings)
##
## Loadings:
## MR3 MR1 MR2
## SI 0.782
## VC 0.769
## IN 0.128 0.650
## MR 0.660
## DS 0.536 0.193
## AR 0.546 0.199
## BD 0.599 0.156
## VP 0.581 -0.109 0.128
## SS 0.994
## CO 0.174 0.191 0.418
##
## MR3 MR1 MR2
## SS loadings 1.769 1.760 1.220
## Proportion Var 0.177 0.176 0.122
## Cumulative Var 0.177 0.353 0.475
print(faPsyBPD4$loadings)
##
## Loadings:
## MR1 MR4 MR3 MR2
## SI 0.776 0.110
## VC 0.775
## IN 0.701
## MR 0.534 0.182
## DS 0.776
## AR 0.116 0.579
## BD 0.665
## VP 0.760
## SS 0.492 0.325
## CO 0.956
##
## MR1 MR4 MR3 MR2
## SS loadings 1.711 1.248 1.184 1.172
## Proportion Var 0.171 0.125 0.118 0.117
## Cumulative Var 0.171 0.296 0.414 0.531
print(faExeBPD$loadings)
##
## Loadings:
## MR1
## LRF 0.627
## CAT 0.608
## JDG 0.272
## MAZ 0.392
## WGN 0.637
##
## MR1
## SS loadings 1.395
## Proportion Var 0.279
EFATOGBPD <- c(0.638, 0.628, 0.613, 0.565, 0.619, 0.593, 0.528, 0.498, 0.535, 0.579, 0.539, 0.612, 0.324, 0.383, 0.620)
EFATOGBPDPsy <- c(0.638, 0.628, 0.613, 0.565, 0.619, 0.593, 0.528, 0.498, 0.535, 0.579); EFATOGBPDExe <- c(0.539, 0.612, 0.324, 0.383, 0.620)
EFASEPBPD <- c(0.625, 0.634, 0.622, 0.578, 0.635, 0.612, 0.538, 0.497, 0.507, 0.565, 0.627, 0.608, 0.272, 0.392, 0.637)
EFASEPBPDPsy <- c(0.625, 0.634, 0.622, 0.578, 0.635, 0.612, 0.538, 0.497, 0.507, 0.565); EFASEPBPDExe <- c(0.627, 0.608, 0.272, 0.392, 0.637)
cor(EFATOGBPD, EFASEPBPD, method = "pearson"); cor(EFATOGBPD, EFASEPBPD, method = "spearman"); CONGO(EFATOGBPD, EFASEPBPD)
## [1] 0.9621195
## [1] 0.8714286
## [1] 0.9987097
cor(EFATOGBPDPsy, EFASEPBPDPsy, method = "pearson"); cor(EFATOGBPDPsy, EFASEPBPDPsy, method = "spearman"); CONGO(EFATOGBPDPsy, EFASEPBPDPsy)
## [1] 0.9583779
## [1] 0.9272727
## [1] 0.9996892
cor(EFATOGBPDExe, EFASEPBPDExe, method = "pearson"); cor(EFATOGBPDExe, EFASEPBPDExe, method = "spearman"); CONGO(EFATOGBPDExe, EFASEPBPDExe)
## [1] 0.9642989
## [1] 0.9
## [1] 0.9966028
BPD1FNo <- '
VCI =~ SI + VC + IN
PRI =~ MR + BD + VP
WMI =~ DS + AR
PSI =~ SS + CO
gPsy =~ VCI + PRI + WMI + PSI
gExe =~ LRF + CAT + JDG + MAZ + WGN
gPsy ~~ 0*gExe'
BPD1F <- '
VCI =~ SI + VC + IN
PRI =~ MR + BD + VP
WMI =~ DS + AR
PSI =~ SS + CO
gPsy =~ VCI + PRI + WMI + PSI
gExe =~ LRF + CAT + JDG + MAZ + WGN
gPsy ~~ gExe'
BPD1FID <- '
VCI =~ SI + VC + IN
PRI =~ MR + BD + VP
WMI =~ DS + AR
PSI =~ SS + CO
gPsy =~ VCI + PRI + WMI + PSI
gExe =~ LRF + CAT + JDG + MAZ + WGN
gPsy ~~ 1*gExe'
BPDNo.fit <- cfa(BPD1FNo, sample.cov = BPD.cor, sample.nobs = nBPD, std.lv = T)
BPD.fit <- cfa(BPD1F, sample.cov = BPD.cor, sample.nobs = nBPD, std.lv = T)
BPDID.fit <- cfa(BPD1FID, sample.cov = BPD.cor, sample.nobs = nBPD, std.lv = T)
round(cbind("No Relationship" = fitMeasures(BPDNo.fit, FITM),
"Free Relationship" = fitMeasures(BPD.fit, FITM),
"Identical" = fitMeasures(BPDID.fit, FITM)),3)
## No Relationship Free Relationship Identical
## chisq 304.945 164.742 164.743
## df 86.000 85.000 86.000
## npar 34.000 35.000 34.000
## cfi 0.765 0.914 0.915
## rmsea 0.111 0.068 0.067
## rmsea.ci.lower 0.098 0.052 0.051
## rmsea.ci.upper 0.125 0.083 0.082
## aic 8048.816 7910.613 7908.614
## bic 8161.798 8026.919 8021.596
summary(BPD.fit, stand = T, fit = T)
## lavaan 0.6-7 ended normally after 35 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of free parameters 35
##
## Number of observations 205
##
## Model Test User Model:
##
## Test statistic 164.742
## Degrees of freedom 85
## P-value (Chi-square) 0.000
##
## Model Test Baseline Model:
##
## Test statistic 1035.564
## Degrees of freedom 105
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.914
## Tucker-Lewis Index (TLI) 0.894
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -3920.307
## Loglikelihood unrestricted model (H1) -3837.936
##
## Akaike (AIC) 7910.613
## Bayesian (BIC) 8026.919
## Sample-size adjusted Bayesian (BIC) 7916.027
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.068
## 90 Percent confidence interval - lower 0.052
## 90 Percent confidence interval - upper 0.083
## P-value RMSEA <= 0.05 0.033
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.066
##
## 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
## VCI =~
## SI 0.507 0.056 9.017 0.000 0.775 0.777
## VC 0.506 0.056 9.006 0.000 0.773 0.775
## IN 0.476 0.055 8.665 0.000 0.729 0.730
## PRI =~
## MR 0.380 0.060 6.319 0.000 0.585 0.587
## BD 0.448 0.065 6.902 0.000 0.690 0.692
## VP 0.438 0.064 6.851 0.000 0.675 0.676
## WMI =~
## DS 0.431 0.073 5.898 0.000 0.734 0.735
## AR 0.411 0.069 5.964 0.000 0.699 0.700
## PSI =~
## SS 0.497 0.063 7.835 0.000 0.724 0.725
## CO 0.533 0.069 7.701 0.000 0.776 0.778
## gPsy =~
## VCI 1.157 0.176 6.564 0.000 0.757 0.757
## PRI 1.173 0.209 5.605 0.000 0.761 0.761
## WMI 1.376 0.277 4.962 0.000 0.809 0.809
## PSI 1.057 0.180 5.867 0.000 0.726 0.726
## gExe =~
## LRF 0.564 0.070 8.030 0.000 0.564 0.565
## CAT 0.620 0.069 8.982 0.000 0.620 0.622
## JDG 0.321 0.074 4.322 0.000 0.321 0.322
## MAZ 0.409 0.073 5.594 0.000 0.409 0.410
## WGN 0.640 0.069 9.333 0.000 0.640 0.642
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## gPsy ~~
## gExe 0.999 0.044 22.901 0.000 0.999 0.999
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .SI 0.394 0.057 6.879 0.000 0.394 0.396
## .VC 0.397 0.057 6.918 0.000 0.397 0.399
## .IN 0.464 0.060 7.712 0.000 0.464 0.467
## .MR 0.653 0.078 8.394 0.000 0.653 0.656
## .BD 0.519 0.074 7.041 0.000 0.519 0.522
## .VP 0.540 0.074 7.292 0.000 0.540 0.542
## .DS 0.457 0.075 6.078 0.000 0.457 0.459
## .AR 0.507 0.074 6.850 0.000 0.507 0.510
## .SS 0.472 0.076 6.243 0.000 0.472 0.474
## .CO 0.394 0.079 5.006 0.000 0.394 0.395
## .LRF 0.677 0.075 9.088 0.000 0.677 0.681
## .CAT 0.611 0.070 8.684 0.000 0.611 0.614
## .JDG 0.892 0.090 9.887 0.000 0.892 0.896
## .MAZ 0.828 0.085 9.703 0.000 0.828 0.832
## .WGN 0.585 0.069 8.494 0.000 0.585 0.588
## .VCI 1.000 0.428 0.428
## .PRI 1.000 0.421 0.421
## .WMI 1.000 0.346 0.346
## .PSI 1.000 0.472 0.472
## gPsy 1.000 1.000 1.000
## gExe 1.000 1.000 1.000
resid(BPD.fit, "cor")
## $type
## [1] "cor.bollen"
##
## $cov
## SI VC IN MR BD VP DS AR SS CO
## SI 0.000
## VC 0.005 0.000
## IN -0.010 0.004 0.000
## MR 0.024 0.019 0.062 0.000
## BD -0.077 -0.058 -0.017 -0.068 0.000
## VP -0.079 -0.079 -0.031 -0.038 0.074 0.000
## DS 0.001 0.032 -0.001 0.221 -0.002 -0.062 0.000
## AR -0.038 0.049 0.101 0.158 0.020 -0.005 0.000 0.000
## SS -0.049 -0.066 -0.068 -0.005 0.098 0.069 -0.040 -0.063 0.000
## CO 0.048 -0.045 -0.064 0.079 -0.022 -0.066 0.049 -0.014 0.000 0.000
## LRF 0.133 0.058 0.043 -0.037 -0.127 -0.096 0.067 -0.056 -0.099 -0.052
## CAT 0.081 0.057 0.061 0.094 -0.061 -0.066 -0.078 0.005 -0.010 0.005
## JDG 0.037 0.065 0.006 0.135 -0.129 -0.036 0.027 0.082 -0.036 0.029
## MAZ -0.141 -0.145 -0.127 -0.026 0.179 0.095 -0.011 -0.055 0.196 0.064
## WGN -0.025 -0.042 0.016 0.047 0.036 0.022 -0.050 -0.030 0.081 0.009
## LRF CAT JDG MAZ WGN
## SI
## VC
## IN
## MR
## BD
## VP
## DS
## AR
## SS
## CO
## LRF 0.000
## CAT 0.026 0.000
## JDG 0.020 0.028 0.000
## MAZ 0.000 -0.033 -0.091 0.000
## WGN 0.035 -0.025 -0.085 0.044 0.000
With a critical r of 0.137, there were six violations of local independence. There were none with p-value scaling (critical r = 0.231).
LATS <- list(
VCI = c("SI", "VC", "IN"),
PRI = c("MR", "BD", "VP"),
WMI = c("DS", "AR"),
PSI = c("SS", "CO"))
semPaths(BPD.fit, "model", "std", title = F, residuals = F, bifactor = c("gPsy", "gExe"), groups = "LATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree2", exoCov = T)
fa.parallel(WEA.cor, n.obs = nWEA)
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Parallel analysis suggests that the number of factors = 3 and the number of components = 2
fa.parallel(WEAPsy.cor, n.obs = nWEA)
## Parallel analysis suggests that the number of factors = 2 and the number of components = 1
fa.parallel(WEAExe.cor, n.obs = nWEA)
## Parallel analysis suggests that the number of factors = 1 and the number of components = 1
faWEA1 <- fa(WEA.cor, n.obs = nWEA, nfactors = 1)
faWEA2 <- fa(WEA.cor, n.obs = nWEA, nfactors = 2)
faWEA3 <- fa(WEA.cor, n.obs = nWEA, nfactors = 3)
faPsyWEA1 <- fa(WEAPsy.cor, n.obs = nWEA, nfactors = 1)
faPsyWEA2 <- fa(WEAPsy.cor, n.obs = nWEA, nfactors = 2)
faExeWEA <- fa(WEAExe.cor, n.obs = nWEA, nfactors = 1)
print(faWEA1$loadings)
##
## Loadings:
## MR1
## SCT1 0.336
## SCT2 0.464
## SCT3 0.499
## CST 0.816
## BPT 0.571
## CFT 0.284
## ART 0.331
##
## MR1
## SS loadings 1.759
## Proportion Var 0.251
print(faWEA2$loadings)
##
## Loadings:
## MR1 MR2
## SCT1 0.376
## SCT2 0.525
## SCT3 0.844
## CST 0.684 0.234
## BPT 0.846 -0.107
## CFT 0.326
## ART 0.311
##
## MR1 MR2
## SS loadings 1.4 1.200
## Proportion Var 0.2 0.171
## Cumulative Var 0.2 0.371
print(faWEA3$loadings)
##
## Loadings:
## MR1 MR2 MR3
## SCT1 0.135 0.330
## SCT2 0.497
## SCT3 0.883
## CST 0.992
## BPT 0.638 -0.111 0.162
## CFT 0.794
## ART 0.136 0.332
##
## MR1 MR2 MR3
## SS loadings 1.436 1.155 0.779
## Proportion Var 0.205 0.165 0.111
## Cumulative Var 0.205 0.370 0.481
print(faPsyWEA1$loadings)
##
## Loadings:
## MR1
## CST 0.733
## BPT 0.811
## CFT 0.332
## ART 0.331
##
## MR1
## SS loadings 1.415
## Proportion Var 0.354
print(faPsyWEA2$loadings)
##
## Loadings:
## MR1 MR2
## CST 0.844
## BPT 0.741
## CFT 0.790
## ART 0.154 0.330
##
## MR1 MR2
## SS loadings 1.285 0.737
## Proportion Var 0.321 0.184
## Cumulative Var 0.321 0.505
print(faExeWEA$loadings)
##
## Loadings:
## MR1
## SCT1 0.352
## SCT2 0.512
## SCT3 0.938
##
## MR1
## SS loadings 1.266
## Proportion Var 0.422
EFATOGWEA <- c(0.336, 0.464, 0.499, 0.816, 0.571, 0.284, 0.331)
EFATOGWEAPsy <- c(0.816, 0.571, 0.284, 0.331); EFATOGWEAExe <- c(0.336, 0.464, 0.499)
EFASEPWEA <- c(0.352, 0.512, 0.938, 0.733, 0.811, 0.332, 0.331)
EFASEPWEAPsy <- c(0.733, 0.811, 0.332, 0.331); EFASEPWEAExe <- c(0.352, 0.512, 0.938)
cor(EFATOGWEA, EFASEPWEA, method = "pearson"); cor(EFATOGWEA, EFASEPWEA, method = "spearman"); CONGO(EFATOGWEA, EFASEPWEA)
## [1] 0.7107018
## [1] 0.8214286
## [1] 0.961914
cor(EFATOGWEAPsy, EFASEPWEAPsy, method = "pearson"); cor(EFATOGWEAPsy, EFASEPWEAPsy, method = "spearman"); CONGO(EFATOGWEAPsy, EFASEPWEAPsy)
## [1] 0.8516381
## [1] 0.6
## [1] 0.9782143
cor(EFATOGWEAExe, EFASEPWEAExe, method = "pearson"); cor(EFATOGWEAExe, EFASEPWEAExe, method = "spearman"); CONGO(EFATOGWEAExe, EFASEPWEAExe)
## [1] 0.8394514
## [1] 1
## [1] 0.9638661
WEA1FNo <- '
Gf =~ CFT + ART
WMC =~ CST + BPT
gPsy =~ Gf + WMC
gExe =~ SCT1 + SCT2 + SCT3
gPsy ~~ 0*gExe
CST ~~ 0*CST'
WEA1F <- '
Gf =~ CFT + ART
WMC =~ CST + BPT
gPsy =~ Gf + WMC
gExe =~ SCT1 + SCT2 + SCT3
gPsy ~~ gExe
CST ~~ 0*CST'
WEA1FID <- '
Gf =~ CFT + ART
WMC =~ CST + BPT
gPsy =~ Gf + WMC
gExe =~ SCT1 + SCT2 + SCT3
gPsy ~~ 1*gExe
CST ~~ 0*CST'
WEANo.fit <- cfa(WEA1FNo, sample.cov = WEA.cor, sample.nobs = nWEA, std.lv = T); "\n"
## Warning in lav_model_vcov(lavmodel = lavmodel, lavsamplestats = lavsamplestats, : lavaan WARNING:
## Could not compute standard errors! The information matrix could
## not be inverted. This may be a symptom that the model is not
## identified.
## [1] "\n"
WEA.fit <- cfa(WEA1F, sample.cov = WEA.cor, sample.nobs = nWEA, std.lv = T)
WEAID.fit <- cfa(WEA1FID, sample.cov = WEA.cor, sample.nobs = nWEA, std.lv = T)
round(cbind("No Relationship" = fitMeasures(WEANo.fit, FITM),
"Free Relationship" = fitMeasures(WEA.fit, FITM),
"Identical" = fitMeasures(WEAID.fit, FITM)),3)
## No Relationship Free Relationship Identical
## chisq 62.597 25.385 31.619
## df 13.000 12.000 13.000
## npar 15.000 16.000 15.000
## cfi 0.813 0.950 0.930
## rmsea 0.133 0.072 0.082
## rmsea.ci.lower 0.101 0.032 0.046
## rmsea.ci.upper 0.167 0.111 0.118
## aic 4070.031 4034.819 4039.052
## bic 4120.590 4088.749 4089.612
summary(WEA.fit, stand = T, fit = T)
## lavaan 0.6-7 ended normally after 30 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of free parameters 16
##
## Number of observations 215
##
## Model Test User Model:
##
## Test statistic 25.385
## Degrees of freedom 12
## P-value (Chi-square) 0.013
##
## Model Test Baseline Model:
##
## Test statistic 286.555
## Degrees of freedom 21
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.950
## Tucker-Lewis Index (TLI) 0.912
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -2001.409
## Loglikelihood unrestricted model (H1) -1988.717
##
## Akaike (AIC) 4034.819
## Bayesian (BIC) 4088.749
## Sample-size adjusted Bayesian (BIC) 4038.048
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.072
## 90 Percent confidence interval - lower 0.032
## 90 Percent confidence interval - upper 0.111
## P-value RMSEA <= 0.05 0.158
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.050
##
## 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
## Gf =~
## CFT 0.458 0.112 4.081 0.000 0.512 0.513
## ART 0.523 0.130 4.009 0.000 0.584 0.585
## WMC =~
## CST 0.574 0.240 2.392 0.017 0.998 1.000
## BPT 0.362 0.154 2.345 0.019 0.629 0.630
## gPsy =~
## Gf 0.497 0.182 2.727 0.006 0.445 0.445
## WMC 1.420 0.890 1.595 0.111 0.818 0.818
## gExe =~
## SCT1 0.412 0.078 5.274 0.000 0.412 0.413
## SCT2 0.607 0.079 7.694 0.000 0.607 0.608
## SCT3 0.767 0.083 9.249 0.000 0.767 0.769
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## gPsy ~~
## gExe 0.596 0.138 4.336 0.000 0.596 0.596
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .CST 0.000 0.000 0.000
## .CFT 0.733 0.127 5.784 0.000 0.733 0.737
## .ART 0.655 0.151 4.345 0.000 0.655 0.658
## .BPT 0.600 0.058 10.368 0.000 0.600 0.603
## .SCT1 0.826 0.087 9.473 0.000 0.826 0.830
## .SCT2 0.627 0.085 7.356 0.000 0.627 0.630
## .SCT3 0.407 0.100 4.053 0.000 0.407 0.409
## .Gf 1.000 0.802 0.802
## .WMC 1.000 0.332 0.332
## gPsy 1.000 1.000 1.000
## gExe 1.000 1.000 1.000
resid(WEA.fit, "cor")
## $type
## [1] "cor.bollen"
##
## $cov
## CFT ART CST BPT SCT1 SCT2 SCT3
## CFT 0.000
## ART 0.000 0.000
## CST 0.003 -0.003 0.000
## BPT 0.122 0.086 0.000 0.000
## SCT1 -0.086 0.096 0.069 -0.057 0.000
## SCT2 0.017 0.056 0.013 -0.037 -0.071 0.000
## SCT3 -0.005 -0.039 -0.025 -0.096 0.013 0.012 0.000
With a critical r of 0.134, there were no violations of local independence.
LATS <- list(
Gf = c("CFT", "ART"),
WMC = c("CST", "BPT"))
semPaths(WEA.fit, "model", "std", title = F, residuals = F, bifactor = c("gPsy", "gExe"), groups = "LATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree2", exoCov = T)
Yet another executive function battery - although small, with more similar than typical content - seems to indicate there’s a single g factor. This sample used the WAIS-IV and the NAB Executive Functions module with adults from Germany (mean age = 53.60). The second test - a reanalysis of the data from Wang et al. (2021), showed a less supportive result, with a correlation of r = 0.596 (mean age = 20.93), although the battery likely came with extreme psychometric sampling error.
Buczylowska, D., Petermann, F., & Daseking, M. (2020). Executive functions and intelligence from the CHC theory perspective: Investigating the correspondence between the WAIS-IV and the NAB Executive Functions Module. Journal of Clinical and Experimental Neuropsychology, 42(3), 240–250. https://doi.org/10.1080/13803395.2019.1705250
Wang, T., Li, C., Ren, X., & Schweizer, K. (2021). How Executive Processes Explain the Overlap between Working Memory Capacity and Fluid Intelligence: A Test of Process Overlap Theory. Journal of Intelligence, 9(2), 21. https://doi.org/10.3390/jintelligence9020021