Startup

Packages

library(pacman)
p_load(psych, lavaan, semPlot, cowplot, gridExtra, ggplot2, knitr, dplyr)

Functions

#Congruence coefficient formula because Psych's fa.congruence function is broken

CONGO <- function(F1, F2) {
  PHI = sum(F1*F2) / sqrt(sum(F1^2)*sum(F2^2))
  return(PHI)}

#ALTCONGO <- function(F1, F2) {
#  FA = mean(F1); FB = mean(F2)
#  PHI = sum((F1-FA)*(F2-FB)) / sqrt(sum((F1-FA)^2) * sum((F2-FB)^2))
#  return(PHI)}

Rationale

Reanalysis of Ree, Carretta & Teachout (1995). Their model showed no relationship between prior job knowledge and job knowledge acquired on the job, a theoretically interesting finding because it reinforces the idea that prior job knowledge is not the relevant thing for employers to care about if they’re aiming for long-term employment. I tested the fit of these models, pruned insignificant paths, and also assessed (1) the relationship between a “general factor” of workplace performance and the AFOQT g and (2) the relationship between the vector of AFOQT subtest g loadings and the vectors of criterion correlations.

Analysis

Data Input

#Corrected full correlation matrix

lower = '
1                                                                                                   
0.58    1                                                                                               
0.73    0.58    1                                                                                           
0.53    0.67    0.55    1                                                                                       
0.68    0.46    0.77    0.46    1                                                                                   
0.55    0.71    0.51    0.6 0.4 1                                                                               
0.48    0.66    0.45    0.62    0.37    0.6 1                                                                           
0.34    0.41    0.33    0.43    0.28    0.39    0.49    1                                                                       
0.3 0.31    0.34    0.34    0.32    0.25    0.33    0.56    1                                                                   
0.24    0.26    0.24    0.25    0.18    0.28    0.23    0.19    0.2 1                                                               
0.25    0.22    0.23    0.19    0.2 0.23    0.18    0.15    0.16    0.23    1                                                           
0.19    0.23    0.19    0.19    0.16    0.22    0.18    0.14    0.14    0.22    0.18    1                                                       
0.23    0.25    0.24    0.23    0.17    0.27    0.21    0.19    0.19    0.27    0.24    0.21    1                                                   
0.2 0.23    0.18    0.19    0.11    0.16    0.22    0.12    0.1 0.24    0.22    0.23    0.16    1                                               
0.14    0.19    0.14    0.17    0.1 0.13    0.17    0.1 0.11    0.2 0.2 0.21    0.22    0.23    1                                           
0.17    0.23    0.17    0.23    0.12    0.15    0.19    0.12    0.15    0.17    0.2 0.19    0.22    0.24    0.2 1                                       
0.18    0.2 0.18    0.19    0.14    0.12    0.2 0.11    0.12    0.16    0.2 0.17    0.16    0.27    0.21    0.22    1                                   
0.22    0.22    0.22    0.2 0.17    0.17    0.19    0.12    0.13    0.23    0.19    0.22    0.23    0.26    0.25    0.26    0.24    1                               
0.2 0.27    0.21    0.21    0.15    0.2 0.22    0.12    0.1 0.23    0.18    0.17    0.2 0.21    0.2 0.17    0.19    0.24    1                           
0.19    0.23    0.18    0.23    0.12    0.18    0.23    0.14    0.12    0.18    0.2 0.16    0.16    0.2 0.2 0.22    0.2 0.23    0.24    1                       
0.03    0.1 0.02    0.11    0   0.08    0.14    0.13    0.1 0.09    0.06    0.08    0.11    0.16    0.14    0.12    0.11    0.11    0.14    0.14    1                   
0.09    0.13    0.07    0.14    0.04    0.11    0.16    0.13    0.09    0.11    0.09    0.08    0.1 0.13    0.15    0.12    0.13    0.13    0.15    0.13    0.26    1               
0.12    0.15    0.11    0.16    0.06    0.1 0.19    0.13    0.09    0.15    0.1 0.16    0.13    0.18    0.14    0.12    0.13    0.13    0.14    0.15    0.26    0.29    1           
0.05    0.11    0.05    0.13    0   0.12    0.15    0.14    0.08    0.09    0.08    0.07    0.12    0.09    0.12    0.11    0.09    0.12    0.15    0.11    0.22    0.2 0.2 1       
0.06    0.07    0.03    0.09    0.01    0.07    0.1 0.12    0.05    0.06    0.06    0.06    0.06    0.11    0.09    0.1 0.07    0.06    0.09    0.07    0.22    0.2 0.2 0.19    1   
0.11    0.15    0.11    0.16    0.06    0.09    0.18    0.13    0.06    0.11    0.11    0.09    0.1 0.15    0.14    0.12    0.09    0.12    0.16    0.14    0.19    0.18    0.21    0.18    0.16    1'

#Corrected AFOQT correlation matrix

lowerAFOQT = '
1                                                                                                   
0.58    1                                                                                               
0.73    0.58    1                                                                                           
0.53    0.67    0.55    1                                                                                       
0.68    0.46    0.77    0.46    1                                                                                   
0.55    0.71    0.51    0.6 0.4 1                                                                               
0.48    0.66    0.45    0.62    0.37    0.6 1'

#Corrected work knowledeg correlation matrix

lowerWK = '
1                                                                       
0.56    1                                                                   
0.19    0.2 1                                                               
0.15    0.16    0.23    1                                                           
0.14    0.14    0.22    0.18    1                                                       
0.19    0.19    0.27    0.24    0.21    1                                                   
0.12    0.1 0.24    0.22    0.23    0.16    1                                               
0.1 0.11    0.2 0.2 0.21    0.22    0.23    1                                           
0.12    0.15    0.17    0.2 0.19    0.22    0.24    0.2 1                                       
0.11    0.12    0.16    0.2 0.17    0.16    0.27    0.21    0.22    1                                   
0.12    0.13    0.23    0.19    0.22    0.23    0.26    0.25    0.26    0.24    1                               
0.12    0.1 0.23    0.18    0.17    0.2 0.21    0.2 0.17    0.19    0.24    1                           
0.14    0.12    0.18    0.2 0.16    0.16    0.2 0.2 0.22    0.2 0.23    0.24    1                       
0.13    0.1 0.09    0.06    0.08    0.11    0.16    0.14    0.12    0.11    0.11    0.14    0.14    1                   
0.13    0.09    0.11    0.09    0.08    0.1 0.13    0.15    0.12    0.13    0.13    0.15    0.13    0.26    1               
0.13    0.09    0.15    0.1 0.16    0.13    0.18    0.14    0.12    0.13    0.13    0.14    0.15    0.26    0.29    1           
0.14    0.08    0.09    0.08    0.07    0.12    0.09    0.12    0.11    0.09    0.12    0.15    0.11    0.22    0.2 0.2 1       
0.12    0.05    0.06    0.06    0.06    0.06    0.11    0.09    0.1 0.07    0.06    0.09    0.07    0.22    0.2 0.2 0.19    1   
0.13    0.06    0.11    0.11    0.09    0.1 0.15    0.14    0.12    0.09    0.12    0.16    0.14    0.19    0.18    0.21    0.18    0.16    1'

#Variable names

Names = list("VA", "AR", "RC", "DI", "WK", "MK", "SR", "IC", "AI", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "CF1", "CF2", "CF3", "CF4", "CF5", "CF6")

NamesAFOQT = list("VA", "AR", "RC", "DI", "WK", "MK", "SR")

NamesWK = list("IC", "AI", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "CF1", "CF2", "CF3", "CF4", "CF5", "CF6")

#Convert to variance-covariance matrices

dat.cor = getCov(lower, names = Names)
SDs <- c(4.23, 4.4, 5.93, 3.93, 5.83, 6.04, 6.73, 4.76, 4.08, 3.19, 3.38, 3.41, 3.36, 4.89, 5.37, 5.43, 4.6, 3.38, 3.7, 3.76, 7.6, 5.77, 4.93, 5.74, 4.69, 4.78)
dat.cov = lavaan::cor2cov(R = dat.cor, sds = SDs)

datAFOQT.cor = getCov(lowerAFOQT, names = NamesAFOQT)
SDsAFOQT <- c(4.23, 4.4, 5.93, 3.93, 5.83, 6.04, 6.73)
datAFOQT.cov = lavaan::cor2cov(R = datAFOQT.cor, sds = SDsAFOQT)

datWK.cor = getCov(lowerWK, names = NamesWK)
SDsWK <- c(4.76, 4.08, 3.19, 3.38, 3.41, 3.36, 4.89, 5.37, 5.43, 4.6, 3.38, 3.7, 3.76, 7.6, 5.77, 4.93, 5.74, 4.69, 4.78)
datWK.cov = lavaan::cor2cov(R = datWK.cor, sds = SDsWK)

#g vectors and validities

gvals <- read.csv("gvals.csv")
#MCVs <- read.csv("MCVs.csv")

#Fit measures

FITS <- c("chisq", "df", "nPar", "cfi", "rmsea", "rmsea.ci.lower", "rmsea.ci.upper", "bic2")

#Variaable groups

AFLATS <- list(
  VER = c("VA", "RC", "WK"),
  QUA = c("AR", "DI", "MK", "SR"),
  JKP = c("IC", "AI"),
  JKTI =c("A1", "A2", "A3", "A4"),
  JKTII = c("A5", "A6", "A7", "A8"),
  JKTIII = c("A9", "A10", "A11"),
  WSI = c("CF1", "CF2", "CF3"),
  WSII = c("CF4", "CF5", "CF6"))

g Loadings

EFA g loadings to compare to the CFA g loadings. First, the AFOQT g loadings are assessed alongside all of the variables and then on their own. The PCA loadings are abundantly similar.

fa.parallel(dat.cov, n.obs = 3428)

## Parallel analysis suggests that the number of factors =  6  and the number of components =  NA
fa.parallel(datAFOQT.cov, n.obs = 3428)

## Parallel analysis suggests that the number of factors =  2  and the number of components =  NA
fa.parallel(datWK.cov, n.obs = 3428)

## Parallel analysis suggests that the number of factors =  5  and the number of components =  NA
EFAALL <- fa(dat.cov, nfactors = 1, n.obs = 3428)
EFAAFOQT <- fa(datAFOQT.cov, nfactors = 1, n.obs = 3428)
EFAWK <- fa(datWK.cov, nfactors = 1, n.obs = 3428)
print(EFAALL, digits = 3)
## Factor Analysis using method =  minres
## Call: fa(r = dat.cov, nfactors = 1, n.obs = 3428)
## Standardized loadings (pattern matrix) based upon correlation matrix
##       MR1     h2    u2 com
## VA  0.711 0.5059 0.494   1
## AR  0.779 0.6067 0.393   1
## RC  0.713 0.5079 0.492   1
## DI  0.734 0.5385 0.461   1
## WK  0.594 0.3528 0.647   1
## MK  0.692 0.4789 0.521   1
## SR  0.706 0.4983 0.502   1
## IC  0.527 0.2776 0.722   1
## AI  0.453 0.2050 0.795   1
## A1  0.412 0.1696 0.830   1
## A2  0.369 0.1362 0.864   1
## A3  0.346 0.1199 0.880   1
## A4  0.397 0.1573 0.843   1
## A5  0.363 0.1318 0.868   1
## A6  0.320 0.1022 0.898   1
## A7  0.347 0.1203 0.880   1
## A8  0.329 0.1082 0.892   1
## A9  0.377 0.1422 0.858   1
## A10 0.371 0.1374 0.863   1
## A11 0.355 0.1260 0.874   1
## CF1 0.207 0.0430 0.957   1
## CF2 0.241 0.0582 0.942   1
## CF3 0.274 0.0752 0.925   1
## CF4 0.210 0.0440 0.956   1
## CF5 0.162 0.0261 0.974   1
## CF6 0.246 0.0607 0.939   1
## 
##                 MR1
## SS loadings    5.73
## Proportion Var 0.22
## 
## Mean item complexity =  1
## Test of the hypothesis that 1 factor is sufficient.
## 
## The degrees of freedom for the null model are  325  and the objective function was  7.595 with Chi Square of  25955.76
## The degrees of freedom for the model are 299  and the objective function was  2.54 
## 
## The root mean square of the residuals (RMSR) is  0.077 
## The df corrected root mean square of the residuals is  0.08 
## 
## The harmonic number of observations is  3428 with the empirical chi square  13283.77  with prob <  0 
## The total number of observations was  3428  with Likelihood Chi Square =  8677.591  with prob <  0 
## 
## Tucker Lewis Index of factoring reliability =  0.6446
## RMSEA index =  0.0904  and the 90 % confidence intervals are  0.0888 0.0921
## BIC =  6243.811
## Fit based upon off diagonal values = 0.888
## Measures of factor score adequacy             
##                                                     MR1
## Correlation of (regression) scores with factors   0.951
## Multiple R square of scores with factors          0.905
## Minimum correlation of possible factor scores     0.809
print(EFAAFOQT, digits = 3)
## Factor Analysis using method =  minres
## Call: fa(r = datAFOQT.cov, nfactors = 1, n.obs = 3428)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      MR1    h2    u2 com
## VA 0.788 0.621 0.379   1
## AR 0.818 0.669 0.331   1
## RC 0.797 0.636 0.364   1
## DI 0.756 0.572 0.428   1
## WK 0.687 0.473 0.527   1
## MK 0.743 0.552 0.448   1
## SR 0.694 0.482 0.518   1
## 
##                  MR1
## SS loadings    4.005
## Proportion Var 0.572
## 
## Mean item complexity =  1
## Test of the hypothesis that 1 factor is sufficient.
## 
## The degrees of freedom for the null model are  21  and the objective function was  4.434 with Chi Square of  15181.2
## The degrees of freedom for the model are 14  and the objective function was  0.785 
## 
## The root mean square of the residuals (RMSR) is  0.096 
## The df corrected root mean square of the residuals is  0.118 
## 
## The harmonic number of observations is  3428 with the empirical chi square  1340.158  with prob <  1.23e-277 
## The total number of observations was  3428  with Likelihood Chi Square =  2686.405  with prob <  0 
## 
## Tucker Lewis Index of factoring reliability =  0.7355
## RMSEA index =  0.236  and the 90 % confidence intervals are  0.2285 0.2436
## BIC =  2572.449
## Fit based upon off diagonal values = 0.972
## Measures of factor score adequacy             
##                                                     MR1
## Correlation of (regression) scores with factors   0.953
## Multiple R square of scores with factors          0.909
## Minimum correlation of possible factor scores     0.817
print(EFAWK, digits = 3)
## Factor Analysis using method =  minres
## Call: fa(r = datWK.cov, nfactors = 1, n.obs = 3428)
## Standardized loadings (pattern matrix) based upon correlation matrix
##       MR1     h2    u2 com
## IC  0.384 0.1471 0.853   1
## AI  0.355 0.1259 0.874   1
## A1  0.451 0.2032 0.797   1
## A2  0.410 0.1680 0.832   1
## A3  0.400 0.1603 0.840   1
## A4  0.440 0.1932 0.807   1
## A5  0.474 0.2247 0.775   1
## A6  0.445 0.1977 0.802   1
## A7  0.436 0.1900 0.810   1
## A8  0.413 0.1702 0.830   1
## A9  0.475 0.2252 0.775   1
## A10 0.438 0.1917 0.808   1
## A11 0.426 0.1816 0.818   1
## CF1 0.349 0.1216 0.878   1
## CF2 0.355 0.1260 0.874   1
## CF3 0.389 0.1517 0.848   1
## CF4 0.312 0.0972 0.903   1
## CF5 0.257 0.0659 0.934   1
## CF6 0.328 0.1075 0.892   1
## 
##                  MR1
## SS loadings    3.049
## Proportion Var 0.160
## 
## Mean item complexity =  1
## Test of the hypothesis that 1 factor is sufficient.
## 
## The degrees of freedom for the null model are  171  and the objective function was  2.461 with Chi Square of  8415.737
## The degrees of freedom for the model are 152  and the objective function was  0.658 
## 
## The root mean square of the residuals (RMSR) is  0.056 
## The df corrected root mean square of the residuals is  0.06 
## 
## The harmonic number of observations is  3428 with the empirical chi square  3720.531  with prob <  0 
## The total number of observations was  3428  with Likelihood Chi Square =  2249.024  with prob <  0 
## 
## Tucker Lewis Index of factoring reliability =  0.7138
## RMSEA index =  0.0634  and the 90 % confidence intervals are  0.0611 0.0658
## BIC =  1011.784
## Fit based upon off diagonal values = 0.89
## Measures of factor score adequacy             
##                                                     MR1
## Correlation of (regression) scores with factors   0.887
## Multiple R square of scores with factors          0.787
## Minimum correlation of possible factor scores     0.573
FACS <- data.frame("ALL" = c(0.711, 0.779, 0.713, 0.734, 0.594, 0.692, 0.706), "SOLO" = c(0.788, 0.818, 0.797, 0.756, 0.687, 0.743, 0.694))
cor(FACS$ALL, FACS$SOLO)
## [1] 0.7562782
cor(FACS$ALL, FACS$SOLO, method = "spearman")
## [1] 0.8571429
CONGO(FACS$ALL, FACS$SOLO)
## [1] 0.9988212

The g loadings are practically identical despite very different variables being included alongside the AFOQT subtests. Presumably this should also be the case for loadings from a CFA. The initial unified factor model did not fit well (which is typical of single-factor models with more than a handful of variables), so I added the three largest residual covariances in the modification indices. Factorial identity was probably maintained regardless of this choice though.

#Unified g model

UNG.model <- '
g =~ VA + AR + RC + DI + WK + MK + SR

WK ~~ RC + VA
VA ~~ RC'

UNG.fit <- cfa(UNG.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T)

fitmeasures(UNG.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        139.579         11.000         17.000          0.992          0.058 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.050          0.067     132236.399
parameterEstimates(UNG.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
g VA 2.822 0.067 42.310 0 0.667
g AR 3.853 0.062 62.457 0 0.876
g RC 3.881 0.094 41.248 0 0.655
g DI 3.059 0.058 52.316 0 0.778
g WK 3.070 0.097 31.541 0 0.527
g MK 4.822 0.089 54.287 0 0.798
g SR 5.081 0.101 50.092 0 0.755
#CFA g loadings with (MI) and without changes from the modification indices

CFAC <- data.frame(CFA = c(0.786, 0.812, 0.792, 0.755, 0.697, 0.747, 0.698)); FACS <- cbind(FACS, CFAC)
CFACMI <- data.frame(CFAMI = c(0.667, 0.876, 0.655, 0.778, 0.527, 0.798, 0.755)); FACS <- cbind(FACS, CFACMI)
cor(FACS$ALL, FACS$CFA)
## [1] 0.7349784
cor(FACS$SOLO, FACS$CFA)
## [1] 0.9990583
cor(FACS$ALL, FACS$CFA, method = "spearman")
## [1] 0.8571429
cor(FACS$SOLO, FACS$CFA, method = "spearman")
## [1] 1
CONGO(FACS$ALL, FACS$CFA)
## [1] 0.9987532
CONGO(FACS$SOLO, FACS$CFA)
## [1] 0.9999753
cor(FACS$ALL, FACS$CFAMI)
## [1] 0.848595
cor(FACS$SOLO, FACS$CFAMI)
## [1] 0.4439311
cor(FACS$ALL, FACS$CFAMI, method = "spearman")
## [1] 0.5
cor(FACS$SOLO, FACS$CFAMI, method = "spearman")
## [1] 0.3928571
CONGO(FACS$ALL, FACS$CFAMI)
## [1] 0.9957417
CONGO(FACS$SOLO, FACS$CFAMI)
## [1] 0.9914298
cor(FACS$CFA, FACS$CFAMI)
## [1] 0.430421
cor(FACS$CFA, FACS$CFAMI, method = "spearman")
## [1] 0.3928571
CONGO(FACS$CFA, FACS$CFAMI)
## [1] 0.9912775

Confirmatory Factor Models

#AFOQT model from the paper

AFOQT.model <- '
Verbal =~ VA + RC + WK
Quant =~ AR + DI + MK + SR
g =~ VA + AR + RC + DI + WK + MK + SR'

AFOQT.fit <- cfa(AFOQT.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T, control=list(rel.tol=1e-4))

fitmeasures(AFOQT.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        104.156          7.000         21.000          0.994          0.064 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.053          0.075     132220.824
parameterEstimates(AFOQT.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 1.168 2.774 0.421 0.674 0.276
Verbal RC 2.481 4.146 0.598 0.550 0.419
Verbal WK 3.921 1.386 2.830 0.005 0.673
Quant AR 2.018 2.034 0.992 0.321 0.459
Quant DI 1.483 1.783 0.832 0.406 0.377
Quant MK 2.502 2.573 0.972 0.331 0.414
Quant SR 3.329 1.573 2.116 0.034 0.495
g VA 3.334 1.270 2.625 0.009 0.789
g AR 3.265 1.245 2.622 0.009 0.742
g RC 4.619 1.760 2.625 0.009 0.779
g DI 2.672 1.015 2.632 0.008 0.680
g WK 3.652 1.393 2.621 0.009 0.627
g MK 4.107 1.567 2.622 0.009 0.680
g SR 4.008 1.532 2.617 0.009 0.596
#Higher-order AFOQT model

AFOQTHOF.model <- '
Verbal =~ VA + RC + WK
Quant =~ AR + DI + MK + SR
g =~ Verbal + Quant'

AFOQTHOF.fit <- cfa(AFOQTHOF.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
## Warning in lav_model_vcov(lavmodel = lavmodel2, 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.
fitmeasures(AFOQTHOF.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        368.582         12.000         16.000          0.977          0.093 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.085          0.101     132460.439
parameterEstimates(AFOQTHOF.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 1.821 NA NA NA 0.821
Verbal RC 2.827 NA NA NA 0.909
Verbal WK 2.534 NA NA NA 0.829
Quant AR 2.052 NA NA NA 0.876
Quant DI 1.635 NA NA NA 0.781
Quant MK 2.556 NA NA NA 0.795
Quant SR 2.708 NA NA NA 0.756
g Verbal 1.624 NA NA NA 0.851
g Quant 1.590 NA NA NA 0.846

This HOF model will be unidentified without more variables, but the fit is probably fine to compare.

#AFOQT model with two factors rather than g

AFOQTII.model <- '
Verbal =~ VA + RC + WK
Quant =~ AR + DI + MK + SR'

AFOQTII.fit <- cfa(AFOQTII.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = F)

fitmeasures(AFOQTII.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        368.582         13.000         15.000          0.977          0.089 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.082          0.097     132455.477
parameterEstimates(AFOQTII.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 3.473 0.061 56.733 0 0.821
Verbal RC 5.392 0.081 66.243 0 0.909
Verbal WK 4.832 0.084 57.522 0 0.829
Quant AR 3.853 0.062 62.364 0 0.876
Quant DI 3.070 0.058 52.537 0 0.781
Quant MK 4.801 0.089 53.881 0 0.795
Quant SR 5.086 0.102 50.102 0 0.756
#Work knowledge model

WORK.model <- '
JKP =~ IC + AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6'

WORK.fit <- cfa(WORK.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = F)

fitmeasures(WORK.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        323.090        137.000         53.000          0.977          0.020 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.017          0.023     371356.231
parameterEstimates(WORK.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
JKP IC 3.750 0.119 31.406 0 0.788
JKP AI 2.900 0.097 29.863 0 0.711
JKTI A1 1.618 0.062 26.161 0 0.507
JKTI A2 1.563 0.066 23.769 0 0.463
JKTI A3 1.504 0.067 22.609 0 0.441
JKTI A4 1.655 0.065 25.390 0 0.493
JKTII A5 2.521 0.093 27.036 0 0.516
JKTII A6 2.555 0.103 24.859 0 0.476
JKTII A7 2.534 0.104 24.362 0 0.467
JKTII A8 2.088 0.088 23.667 0 0.454
JKTIII A9 1.790 0.067 26.643 0 0.530
JKTIII A10 1.737 0.073 23.797 0 0.469
JKTIII A11 1.717 0.074 23.160 0 0.457
WSI CF1 3.877 0.156 24.789 0 0.510
WSI CF2 2.964 0.119 24.953 0 0.514
WSI CF3 2.639 0.102 25.954 0 0.535
WSII CF4 2.514 0.127 19.854 0 0.438
WSII CF5 1.895 0.102 18.520 0 0.404
WSII CF6 2.005 0.105 19.143 0 0.420
#Work HOF-g Model

WORKG.model <- '
JKP =~ IC + AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6
WG =~ JKP + JKTI + JKTII + JKTIII + WSI + WSII

WSI ~~ WSII'

WORKG.fit <- cfa(WORKG.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)

fitmeasures(WORKG.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        413.589        145.000         45.000          0.968          0.023 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.021          0.026     371407.033
parameterEstimates(WORKG.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
JKP IC 3.315 0.120 27.655 0 0.765
JKP AI 2.722 0.098 27.860 0 0.732
JKTI A1 0.707 0.071 9.894 0 0.505
JKTI A2 0.685 0.070 9.794 0 0.462
JKTI A3 0.664 0.068 9.734 0 0.444
JKTI A4 0.724 0.073 9.868 0 0.492
JKTII A5 0.715 0.163 4.375 0 0.514
JKTII A6 0.723 0.165 4.373 0 0.473
JKTII A7 0.726 0.166 4.372 0 0.470
JKTII A8 0.596 0.136 4.370 0 0.455
JKTIII A9 0.526 0.133 3.965 0 0.529
JKTIII A10 0.510 0.128 3.973 0 0.468
JKTIII A11 0.507 0.128 3.973 0 0.458
WSI CF1 3.226 0.146 22.080 0 0.507
WSI CF2 2.476 0.111 22.258 0 0.513
WSI CF3 2.228 0.097 23.044 0 0.540
WSII CF4 2.095 0.124 16.947 0 0.437
WSII CF5 1.586 0.098 16.185 0 0.404
WSII CF6 1.682 0.101 16.593 0 0.421
WG JKP 0.452 0.028 16.397 0 0.412
WG JKTI 2.050 0.223 9.194 0 0.899
WG JKTII 3.368 0.802 4.202 0 0.959
WG JKTIII 3.247 0.846 3.836 0 0.956
WG WSI 0.653 0.040 16.178 0 0.547
WG WSII 0.655 0.050 13.016 0 0.548

This model is far less parsimonious and fits worse. Fitting a few residual covariances, it becomes more parsimonious and just as well-fitting, but that’s not particularly interesting.

#Work BF-g Model

WORKGBF.model <- '
JKP =~ IC + AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6
WG =~ IC + AI + A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + CF1 + CF2 + CF3 + CF4 + CF5 + CF6'

WORKGBF.fit <- cfa(WORKGBF.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
## Warning in lav_model_vcov(lavmodel = lavmodel2, 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.
fitmeasures(WORKGBF.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        719.876        133.000         57.000          0.929          0.036 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.033          0.038     371772.867
parameterEstimates(WORKGBF.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
JKP IC 3.283 NA NA NA 0.690
JKP AI 2.744 NA NA NA 0.673
JKTI A1 0.851 NA NA NA 0.267
JKTI A2 0.661 NA NA NA 0.196
JKTI A3 0.421 NA NA NA 0.124
JKTI A4 1.083 NA NA NA 0.322
JKTII A5 1.016 NA NA NA 0.208
JKTII A6 0.229 NA NA NA 0.043
JKTII A7 0.567 NA NA NA 0.104
JKTII A8 1.573 NA NA NA 0.342
JKTIII A9 0.234 NA NA NA 0.069
JKTIII A10 0.951 NA NA NA 0.257
JKTIII A11 0.699 NA NA NA 0.186
WSI CF1 2.854 NA NA NA 0.376
WSI CF2 2.561 NA NA NA 0.444
WSI CF3 2.036 NA NA NA 0.413
WSII CF4 2.074 NA NA NA 0.361
WSII CF5 1.669 NA NA NA 0.356
WSII CF6 1.244 NA NA NA 0.260
WG IC 1.530 NA NA NA 0.321
WG AI 1.217 NA NA NA 0.298
WG A1 1.402 NA NA NA 0.440
WG A2 1.377 NA NA NA 0.408
WG A3 1.384 NA NA NA 0.406
WG A4 1.423 NA NA NA 0.424
WG A5 2.358 NA NA NA 0.482
WG A6 2.483 NA NA NA 0.462
WG A7 2.425 NA NA NA 0.447
WG A8 1.902 NA NA NA 0.414
WG A9 1.693 NA NA NA 0.501
WG A10 1.641 NA NA NA 0.443
WG A11 1.629 NA NA NA 0.433
WG CF1 2.301 NA NA NA 0.303
WG CF2 1.777 NA NA NA 0.308
WG CF3 1.707 NA NA NA 0.346
WG CF4 1.606 NA NA NA 0.280
WG CF5 1.028 NA NA NA 0.219
WG CF6 1.468 NA NA NA 0.307

Clearly the model can’t be identified with the JKP factor.

WORKGBFII.model <- '
IC ~~ AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6
WG =~ IC + AI + A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + CF1 + CF2 + CF3 + CF4 + CF5 + CF6'

WORKGBFII.fit <- cfa(WORKGBFII.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)

fitmeasures(WORKGBFII.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        719.876        134.000         56.000          0.929          0.036 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.033          0.038     371767.904
parameterEstimates(WORKGBFII.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
JKTI A1 0.851 0.154 5.536 0.000 0.267
JKTI A2 0.661 0.136 4.858 0.000 0.196
JKTI A3 0.421 0.130 3.243 0.001 0.124
JKTI A4 1.083 0.187 5.778 0.000 0.322
JKTII A5 1.016 0.390 2.603 0.009 0.208
JKTII A6 0.229 0.225 1.017 0.309 0.043
JKTII A7 0.567 0.250 2.270 0.023 0.104
JKTII A8 1.573 0.581 2.708 0.007 0.342
JKTIII A9 0.234 0.180 1.300 0.193 0.069
JKTIII A10 0.951 0.645 1.475 0.140 0.257
JKTIII A11 0.699 0.483 1.446 0.148 0.186
WSI CF1 2.854 0.227 12.584 0.000 0.376
WSI CF2 2.561 0.193 13.274 0.000 0.444
WSI CF3 2.036 0.156 13.063 0.000 0.413
WSII CF4 2.074 0.268 7.729 0.000 0.361
WSII CF5 1.669 0.218 7.670 0.000 0.356
WSII CF6 1.244 0.171 7.285 0.000 0.260
WG IC 1.530 0.092 16.714 0.000 0.321
WG AI 1.217 0.079 15.440 0.000 0.298
WG A1 1.402 0.062 22.755 0.000 0.440
WG A2 1.377 0.066 20.956 0.000 0.408
WG A3 1.384 0.066 20.829 0.000 0.406
WG A4 1.423 0.065 21.826 0.000 0.424
WG A5 2.358 0.094 24.961 0.000 0.482
WG A6 2.483 0.104 23.940 0.000 0.462
WG A7 2.425 0.105 23.065 0.000 0.447
WG A8 1.902 0.091 20.919 0.000 0.414
WG A9 1.693 0.064 26.308 0.000 0.501
WG A10 1.641 0.072 22.889 0.000 0.443
WG A11 1.629 0.073 22.306 0.000 0.433
WG CF1 2.301 0.147 15.608 0.000 0.303
WG CF2 1.777 0.112 15.889 0.000 0.308
WG CF3 1.707 0.095 18.002 0.000 0.346
WG CF4 1.606 0.112 14.397 0.000 0.280
WG CF5 1.028 0.092 11.182 0.000 0.219
WG CF6 1.468 0.092 15.884 0.000 0.307

And many of the indicators no longer load on their respective factors, but it may be inappropriate to remove them, so one of the models below retains insignificant indicators.

WORKGBFIIINS.model <- '
IC ~~ AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6
WG =~ IC + AI + A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + CF1 + CF2 + CF3 + CF4 + CF5 + CF6

WSI ~~ WSII'

WORKGBFIII.model <- '
IC ~~ AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A7 + A8
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6
WG =~ IC + AI + A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + CF1 + CF2 + CF3 + CF4 + CF5 + CF6

WSI ~~ WSII'

WORKGBFIIINS.fit <- cfa(WORKGBFIIINS.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
WORKGBFIII.fit <- cfa(WORKGBFIII.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)

fitmeasures(WORKGBFIIINS.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        360.186        133.000         57.000          0.973          0.022 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.020          0.025     371413.177
fitmeasures(WORKGBFIII.fit, FITS)
##          chisq             df           npar            cfi          rmsea 
##        370.262        137.000         53.000          0.972          0.022 
## rmsea.ci.lower rmsea.ci.upper           bic2 
##          0.020          0.025     371403.404
parameterEstimates(WORKGBFIIINS.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
JKTI A1 0.773 0.170 4.546 0.000 0.243
JKTI A2 0.582 0.145 4.017 0.000 0.172
JKTI A3 0.329 0.138 2.389 0.017 0.096
JKTI A4 1.074 0.224 4.789 0.000 0.320
JKTII A5 0.956 0.466 2.052 0.040 0.196
JKTII A6 0.142 0.235 0.605 0.545 0.027
JKTII A7 0.479 0.265 1.808 0.071 0.088
JKTII A8 1.534 0.721 2.127 0.033 0.333
JKTIII A9 0.145 0.196 0.736 0.462 0.043
JKTIII A10 1.132 1.351 0.838 0.402 0.306
JKTIII A11 0.580 0.707 0.820 0.412 0.154
WSI CF1 3.384 0.186 18.166 0.000 0.445
WSI CF2 2.520 0.141 17.934 0.000 0.437
WSI CF3 2.100 0.118 17.743 0.000 0.426
WSII CF4 2.090 0.148 14.135 0.000 0.364
WSII CF5 1.889 0.126 14.965 0.000 0.403
WSII CF6 1.421 0.119 11.954 0.000 0.297
WG IC 1.492 0.092 16.224 0.000 0.313
WG AI 1.227 0.079 15.535 0.000 0.301
WG A1 1.436 0.062 23.157 0.000 0.450
WG A2 1.418 0.066 21.476 0.000 0.420
WG A3 1.422 0.067 21.275 0.000 0.417
WG A4 1.451 0.066 22.094 0.000 0.432
WG A5 2.379 0.095 25.032 0.000 0.487
WG A6 2.504 0.104 24.028 0.000 0.466
WG A7 2.459 0.106 23.288 0.000 0.453
WG A8 1.939 0.092 21.167 0.000 0.422
WG A9 1.733 0.065 26.815 0.000 0.513
WG A10 1.637 0.072 22.665 0.000 0.442
WG A11 1.638 0.074 22.274 0.000 0.436
WG CF1 1.998 0.149 13.426 0.000 0.263
WG CF2 1.578 0.113 13.989 0.000 0.273
WG CF3 1.538 0.096 16.064 0.000 0.312
WG CF4 1.376 0.113 12.203 0.000 0.240
WG CF5 0.817 0.093 8.791 0.000 0.174
WG CF6 1.308 0.093 13.998 0.000 0.274
parameterEstimates(WORKGBFIII.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
JKTI A1 0.794 0.164 4.830 0.000 0.249
JKTI A2 0.600 0.141 4.249 0.000 0.178
JKTI A3 0.358 0.134 2.666 0.008 0.105
JKTI A4 1.083 0.213 5.075 0.000 0.322
JKTII A5 1.063 0.446 2.384 0.017 0.218
JKTII A7 0.533 0.251 2.121 0.034 0.098
JKTII A8 1.370 0.565 2.425 0.015 0.298
WSI CF1 3.382 0.186 18.177 0.000 0.445
WSI CF2 2.519 0.140 17.947 0.000 0.437
WSI CF3 2.103 0.118 17.778 0.000 0.427
WSII CF4 2.088 0.148 14.138 0.000 0.364
WSII CF5 1.891 0.126 14.985 0.000 0.403
WSII CF6 1.420 0.119 11.957 0.000 0.297
WG IC 1.481 0.092 16.154 0.000 0.311
WG AI 1.216 0.079 15.436 0.000 0.298
WG A1 1.427 0.062 23.196 0.000 0.447
WG A2 1.410 0.066 21.500 0.000 0.417
WG A3 1.410 0.066 21.244 0.000 0.413
WG A4 1.441 0.065 22.099 0.000 0.429
WG A5 2.371 0.093 25.487 0.000 0.485
WG A6 2.513 0.100 25.080 0.000 0.468
WG A7 2.448 0.104 23.447 0.000 0.451
WG A8 1.946 0.089 21.839 0.000 0.423
WG A9 1.743 0.062 27.963 0.000 0.516
WG A10 1.684 0.069 24.324 0.000 0.455
WG A11 1.680 0.070 23.836 0.000 0.447
WG CF1 2.001 0.148 13.491 0.000 0.263
WG CF2 1.580 0.112 14.055 0.000 0.274
WG CF3 1.533 0.095 16.070 0.000 0.311
WG CF4 1.379 0.112 12.270 0.000 0.240
WG CF5 0.814 0.093 8.794 0.000 0.174
WG CF6 1.310 0.093 14.070 0.000 0.274

It’ll be interesting to see to what degree these measures share a general dimension. I’ll check for a two-level higher-order, a three-level higher-order, and a bifactor model. There’s no conceptually clear mixed g/group factors model, but if someone suggests one, I’ll fit it.

#Fit the models

HOF.fit <- cfa(HOF.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
HOFREG.fit <- cfa(HOFREG.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
HOFRREG.fit <- cfa(HOFRREG.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T) #reversed regression
CHCHOF.fit <- cfa(CHCHOF.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
## Warning in lav_model_vcov(lavmodel = lavmodel2, 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.
BF.fit <- cfa(BF.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
BFREG.fit <- cfa(BFREG.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
BFRREG.fit <- cfa(BFRREG.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T) #reversed regression
CHCBF.fit <- cfa(CHCBF.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T)
## Warning in lav_model_vcov(lavmodel = lavmodel2, 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.
parameterEstimates(HOF.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.298 0.060 38.513 0 0.822
Verbal RC 3.568 0.088 40.571 0 0.910
Verbal WK 3.191 0.082 38.702 0 0.828
Quant AR 1.058 0.183 5.795 0 0.874
Quant DI 0.848 0.146 5.792 0 0.784
Quant MK 1.313 0.227 5.793 0 0.790
Quant SR 1.410 0.243 5.789 0 0.761
g Verbal 1.134 0.046 24.498 0 0.750
g Quant 3.493 0.651 5.366 0 0.961
JKP IC 3.235 0.104 31.228 0 0.801
JKP AI 2.418 0.075 32.211 0 0.699
JKTI A1 0.686 0.070 9.776 0 0.512
JKTI A2 0.649 0.067 9.656 0 0.457
JKTI A3 0.627 0.065 9.595 0 0.438
JKTI A4 0.702 0.072 9.751 0 0.497
JKTII A5 1.193 0.100 11.937 0 0.517
JKTII A6 1.173 0.100 11.715 0 0.463
JKTII A7 1.212 0.103 11.768 0 0.473
JKTII A8 0.997 0.085 11.696 0 0.460
JKTIII A9 0.681 0.093 7.358 0 0.509
JKTIII A10 0.708 0.096 7.353 0 0.484
JKTIII A11 0.692 0.094 7.343 0 0.465
WSI CF1 2.964 0.149 19.824 0 0.480
WSI CF2 2.444 0.117 20.912 0 0.521
WSI CF3 2.234 0.103 21.594 0 0.558
WSII CF4 1.975 0.134 14.738 0 0.439
WSII CF5 1.336 0.101 13.276 0 0.363
WSII CF6 1.701 0.114 14.905 0 0.454
WG JKP 0.624 0.031 20.275 0 0.530
WG JKTI 2.159 0.233 9.249 0 0.907
WG JKTII 1.870 0.167 11.198 0 0.882
WG JKTIII 2.320 0.330 7.037 0 0.918
WG WSI 0.718 0.042 17.162 0 0.583
WG WSII 0.790 0.058 13.577 0 0.620
parameterEstimates(HOFREG.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.298 0.060 38.513 0 0.822
Verbal RC 3.568 0.088 40.571 0 0.910
Verbal WK 3.191 0.082 38.702 0 0.828
Quant AR 1.058 0.183 5.795 0 0.874
Quant DI 0.848 0.146 5.792 0 0.784
Quant MK 1.313 0.227 5.793 0 0.790
Quant SR 1.410 0.243 5.789 0 0.761
g Verbal 1.134 0.046 24.498 0 0.750
g Quant 3.493 0.651 5.366 0 0.961
JKP IC 3.235 0.104 31.228 0 0.801
JKP AI 2.418 0.075 32.211 0 0.699
JKTI A1 0.686 0.070 9.776 0 0.512
JKTI A2 0.649 0.067 9.656 0 0.457
JKTI A3 0.627 0.065 9.595 0 0.438
JKTI A4 0.702 0.072 9.751 0 0.497
JKTII A5 1.193 0.100 11.937 0 0.517
JKTII A6 1.173 0.100 11.716 0 0.463
JKTII A7 1.212 0.103 11.768 0 0.473
JKTII A8 0.997 0.085 11.696 0 0.460
JKTIII A9 0.681 0.093 7.358 0 0.509
JKTIII A10 0.708 0.096 7.353 0 0.484
JKTIII A11 0.692 0.094 7.342 0 0.465
WSI CF1 2.964 0.149 19.824 0 0.480
WSI CF2 2.444 0.117 20.912 0 0.521
WSI CF3 2.234 0.103 21.594 0 0.558
WSII CF4 1.975 0.134 14.738 0 0.439
WSII CF5 1.336 0.101 13.276 0 0.363
WSII CF6 1.701 0.114 14.905 0 0.454
WG JKP 0.464 0.024 19.277 0 0.530
WG JKTI 1.606 0.177 9.072 0 0.907
WG JKTII 1.391 0.127 10.928 0 0.882
WG JKTIII 1.725 0.248 6.958 0 0.918
WG WSI 0.534 0.032 16.539 0 0.583
WG WSII 0.588 0.044 13.260 0 0.620
parameterEstimates(HOFRREG.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.298 0.060 38.514 0 0.822
Verbal RC 3.568 0.088 40.572 0 0.910
Verbal WK 3.191 0.082 38.702 0 0.828
Quant AR 1.058 0.183 5.795 0 0.874
Quant DI 0.848 0.146 5.792 0 0.784
Quant MK 1.313 0.227 5.792 0 0.790
Quant SR 1.410 0.243 5.789 0 0.761
g Verbal 0.843 0.033 25.517 0 0.750
g Quant 2.598 0.504 5.154 0 0.961
JKP IC 3.235 0.104 31.228 0 0.801
JKP AI 2.418 0.075 32.211 0 0.699
JKTI A1 0.686 0.070 9.776 0 0.512
JKTI A2 0.649 0.067 9.656 0 0.457
JKTI A3 0.627 0.065 9.595 0 0.438
JKTI A4 0.702 0.072 9.751 0 0.497
JKTII A5 1.193 0.100 11.937 0 0.517
JKTII A6 1.173 0.100 11.715 0 0.463
JKTII A7 1.212 0.103 11.768 0 0.473
JKTII A8 0.997 0.085 11.696 0 0.460
JKTIII A9 0.681 0.093 7.358 0 0.509
JKTIII A10 0.708 0.096 7.353 0 0.484
JKTIII A11 0.692 0.094 7.342 0 0.465
WSI CF1 2.964 0.149 19.824 0 0.480
WSI CF2 2.444 0.117 20.912 0 0.521
WSI CF3 2.234 0.103 21.594 0 0.558
WSII CF4 1.975 0.134 14.738 0 0.439
WSII CF5 1.336 0.101 13.276 0 0.363
WSII CF6 1.701 0.114 14.905 0 0.454
WG JKP 0.624 0.031 20.275 0 0.530
WG JKTI 2.159 0.233 9.249 0 0.907
WG JKTII 1.870 0.167 11.198 0 0.882
WG JKTIII 2.320 0.330 7.037 0 0.918
WG WSI 0.718 0.042 17.162 0 0.583
WG WSII 0.790 0.058 13.577 0 0.620
parameterEstimates(CHCHOF.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.298 NA NA NA 0.822
Verbal RC 3.568 NA NA NA 0.910
Verbal WK 3.191 NA NA NA 0.828
Quant AR 1.058 NA NA NA 0.874
Quant DI 0.848 NA NA NA 0.784
Quant MK 1.313 NA NA NA 0.790
Quant SR 1.410 NA NA NA 0.761
g Verbal 0.643 NA NA NA 0.750
g Quant 1.982 NA NA NA 0.961
JKP IC 3.235 NA NA NA 0.801
JKP AI 2.418 NA NA NA 0.699
JKTI A1 0.686 NA NA NA 0.512
JKTI A2 0.649 NA NA NA 0.457
JKTI A3 0.627 NA NA NA 0.438
JKTI A4 0.702 NA NA NA 0.497
JKTII A5 1.193 NA NA NA 0.517
JKTII A6 1.173 NA NA NA 0.463
JKTII A7 1.212 NA NA NA 0.473
JKTII A8 0.997 NA NA NA 0.460
JKTIII A9 0.681 NA NA NA 0.509
JKTIII A10 0.708 NA NA NA 0.484
JKTIII A11 0.692 NA NA NA 0.465
WSI CF1 2.964 NA NA NA 0.480
WSI CF2 2.444 NA NA NA 0.521
WSI CF3 2.234 NA NA NA 0.558
WSII CF4 1.975 NA NA NA 0.439
WSII CF5 1.336 NA NA NA 0.363
WSII CF6 1.701 NA NA NA 0.454
WG JKP 0.365 NA NA NA 0.530
WG JKTI 1.261 NA NA NA 0.907
WG JKTII 1.092 NA NA NA 0.882
WG JKTIII 1.355 NA NA NA 0.918
WG WSI 0.419 NA NA NA 0.583
WG WSII 0.462 NA NA NA 0.620
GHI g 1.452 NA NA NA 0.824
GHI WG 1.390 NA NA NA 0.812
parameterEstimates(BF.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.014 0.059 34.030 0.000 0.476
Verbal RC 3.638 0.082 44.248 0.000 0.614
Verbal WK 4.010 0.087 45.879 0.000 0.688
Quant AR 0.703 0.196 3.593 0.000 0.160
Quant DI -1.000 0.430 -2.327 0.020 -0.254
Quant MK 0.964 0.256 3.760 0.000 0.160
Quant SR 0.005 0.190 0.027 0.978 0.001
g VA 2.816 0.067 41.819 0.000 0.666
g RC 3.898 0.095 41.149 0.000 0.657
g WK 3.084 0.097 31.680 0.000 0.529
g AR 3.834 0.068 56.611 0.000 0.871
g DI 3.205 0.065 49.593 0.000 0.816
g MK 4.744 0.099 47.968 0.000 0.785
g SR 5.090 0.103 49.291 0.000 0.756
JKTI A1 0.726 0.163 4.460 0.000 0.227
JKTI A2 0.610 0.150 4.057 0.000 0.180
JKTI A3 0.357 0.140 2.556 0.011 0.105
JKTI A4 1.004 0.213 4.706 0.000 0.299
JKTII A5 1.397 0.253 5.532 0.000 0.286
JKTII A6 0.718 0.197 3.638 0.000 0.134
JKTII A7 0.866 0.203 4.276 0.000 0.159
JKTII A8 1.509 0.269 5.617 0.000 0.328
JKTIII A9 0.451 0.170 2.658 0.008 0.134
JKTIII A10 0.892 0.313 2.849 0.004 0.241
JKTIII A11 0.809 0.287 2.813 0.005 0.215
WSI CF1 2.981 0.223 13.354 0.000 0.392
WSI CF2 2.600 0.186 13.993 0.000 0.451
WSI CF3 2.084 0.151 13.793 0.000 0.423
WSII CF4 2.104 0.260 8.091 0.000 0.367
WSII CF5 1.712 0.213 8.042 0.000 0.365
WSII CF6 1.279 0.167 7.636 0.000 0.268
WG IC 2.012 0.088 22.846 0.000 0.423
WG AI 1.493 0.077 19.496 0.000 0.366
WG A1 1.469 0.060 24.613 0.000 0.461
WG A2 1.396 0.064 21.804 0.000 0.413
WG A3 1.392 0.065 21.495 0.000 0.408
WG A4 1.485 0.063 23.480 0.000 0.442
WG A5 2.211 0.092 24.147 0.000 0.452
WG A6 2.272 0.101 22.445 0.000 0.423
WG A7 2.325 0.102 22.763 0.000 0.428
WG A8 1.797 0.088 20.514 0.000 0.391
WG A9 1.593 0.063 25.381 0.000 0.471
WG A10 1.630 0.069 23.508 0.000 0.441
WG A11 1.605 0.071 22.684 0.000 0.427
WG CF1 2.133 0.145 14.724 0.000 0.281
WG CF2 1.710 0.110 15.594 0.000 0.296
WG CF3 1.654 0.093 17.784 0.000 0.336
WG CF4 1.559 0.109 14.247 0.000 0.272
WG CF5 0.970 0.090 10.745 0.000 0.207
WG CF6 1.441 0.091 15.896 0.000 0.302
parameterEstimates(BFREG.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.014 0.059 34.031 0.000 0.476
Verbal RC 3.638 0.082 44.248 0.000 0.614
Verbal WK 4.010 0.087 45.879 0.000 0.688
Quant AR 0.703 0.196 3.592 0.000 0.160
Quant DI -1.000 0.430 -2.327 0.020 -0.255
Quant MK 0.964 0.256 3.760 0.000 0.160
Quant SR 0.005 0.190 0.027 0.978 0.001
g VA 2.816 0.067 41.819 0.000 0.666
g RC 3.898 0.095 41.149 0.000 0.657
g WK 3.084 0.097 31.680 0.000 0.529
g AR 3.834 0.068 56.612 0.000 0.871
g DI 3.205 0.065 49.593 0.000 0.816
g MK 4.744 0.099 47.969 0.000 0.786
g SR 5.090 0.103 49.291 0.000 0.756
JKTI A1 0.726 0.163 4.459 0.000 0.227
JKTI A2 0.610 0.150 4.057 0.000 0.180
JKTI A3 0.357 0.140 2.556 0.011 0.105
JKTI A4 1.004 0.213 4.706 0.000 0.299
JKTII A5 1.397 0.253 5.532 0.000 0.286
JKTII A6 0.718 0.197 3.638 0.000 0.134
JKTII A7 0.866 0.203 4.276 0.000 0.159
JKTII A8 1.509 0.269 5.618 0.000 0.328
JKTIII A9 0.451 0.170 2.658 0.008 0.134
JKTIII A10 0.892 0.313 2.849 0.004 0.241
JKTIII A11 0.808 0.287 2.813 0.005 0.215
WSI CF1 2.981 0.223 13.354 0.000 0.392
WSI CF2 2.600 0.186 13.993 0.000 0.451
WSI CF3 2.084 0.151 13.793 0.000 0.423
WSII CF4 2.104 0.260 8.090 0.000 0.367
WSII CF5 1.712 0.213 8.042 0.000 0.365
WSII CF6 1.279 0.167 7.636 0.000 0.268
WG IC 1.538 0.070 22.015 0.000 0.423
WG AI 1.141 0.060 18.972 0.000 0.366
WG A1 1.123 0.048 23.495 0.000 0.461
WG A2 1.068 0.051 21.016 0.000 0.413
WG A3 1.064 0.051 20.740 0.000 0.408
WG A4 1.136 0.050 22.503 0.000 0.442
WG A5 1.691 0.073 23.099 0.000 0.452
WG A6 1.737 0.080 21.600 0.000 0.423
WG A7 1.778 0.081 21.883 0.000 0.428
WG A8 1.374 0.069 19.859 0.000 0.391
WG A9 1.218 0.050 24.188 0.000 0.471
WG A10 1.246 0.055 22.551 0.000 0.441
WG A11 1.227 0.056 21.820 0.000 0.427
WG CF1 1.631 0.113 14.495 0.000 0.281
WG CF2 1.308 0.085 15.323 0.000 0.296
WG CF3 1.265 0.073 17.384 0.000 0.336
WG CF4 1.192 0.085 14.040 0.000 0.272
WG CF5 0.741 0.070 10.655 0.000 0.207
WG CF6 1.102 0.071 15.610 0.000 0.302
parameterEstimates(BFRREG.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.014 0.059 34.030 0.000 0.476
Verbal RC 3.638 0.082 44.248 0.000 0.614
Verbal WK 4.010 0.087 45.879 0.000 0.688
Quant AR 0.703 0.196 3.593 0.000 0.160
Quant DI -1.000 0.430 -2.327 0.020 -0.254
Quant MK 0.964 0.256 3.760 0.000 0.160
Quant SR 0.005 0.190 0.027 0.978 0.001
g VA 2.153 0.056 38.516 0.000 0.666
g RC 2.980 0.078 37.991 0.000 0.657
g WK 2.358 0.078 30.169 0.000 0.529
g AR 2.931 0.064 45.887 0.000 0.871
g DI 2.450 0.058 42.032 0.000 0.816
g MK 3.627 0.089 40.902 0.000 0.785
g SR 3.892 0.088 44.157 0.000 0.756
JKTI A1 0.726 0.163 4.460 0.000 0.228
JKTI A2 0.610 0.150 4.057 0.000 0.180
JKTI A3 0.357 0.140 2.556 0.011 0.105
JKTI A4 1.004 0.213 4.706 0.000 0.299
JKTII A5 1.397 0.253 5.532 0.000 0.286
JKTII A6 0.718 0.197 3.638 0.000 0.134
JKTII A7 0.866 0.203 4.275 0.000 0.159
JKTII A8 1.509 0.269 5.617 0.000 0.328
JKTIII A9 0.451 0.170 2.658 0.008 0.134
JKTIII A10 0.892 0.313 2.849 0.004 0.241
JKTIII A11 0.809 0.287 2.813 0.005 0.215
WSI CF1 2.981 0.223 13.354 0.000 0.392
WSI CF2 2.600 0.186 13.993 0.000 0.451
WSI CF3 2.084 0.151 13.793 0.000 0.423
WSII CF4 2.104 0.260 8.091 0.000 0.367
WSII CF5 1.712 0.213 8.043 0.000 0.365
WSII CF6 1.279 0.167 7.636 0.000 0.268
WG IC 2.012 0.088 22.846 0.000 0.423
WG AI 1.493 0.077 19.496 0.000 0.366
WG A1 1.469 0.060 24.613 0.000 0.461
WG A2 1.396 0.064 21.804 0.000 0.413
WG A3 1.392 0.065 21.495 0.000 0.408
WG A4 1.485 0.063 23.480 0.000 0.442
WG A5 2.211 0.092 24.147 0.000 0.452
WG A6 2.272 0.101 22.445 0.000 0.423
WG A7 2.325 0.102 22.763 0.000 0.428
WG A8 1.797 0.088 20.514 0.000 0.391
WG A9 1.593 0.063 25.381 0.000 0.471
WG A10 1.630 0.069 23.508 0.000 0.441
WG A11 1.605 0.071 22.684 0.000 0.427
WG CF1 2.133 0.145 14.724 0.000 0.281
WG CF2 1.710 0.110 15.594 0.000 0.296
WG CF3 1.654 0.093 17.783 0.000 0.336
WG CF4 1.559 0.109 14.247 0.000 0.272
WG CF5 0.970 0.090 10.745 0.000 0.207
WG CF6 1.441 0.091 15.896 0.000 0.302
parameterEstimates(CHCBF.fit, stand = T) %>% 
  filter(op == "=~") %>% select('Latent Factor' = lhs, Indicator = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Factor Loadings")
Factor Loadings
Latent Factor Indicator B SE Z p-value Beta
Verbal VA 2.014 NA NA NA 0.476
Verbal RC 3.638 NA NA NA 0.614
Verbal WK 4.010 NA NA NA 0.688
Quant AR 0.703 NA NA NA 0.160
Quant DI -1.000 NA NA NA -0.254
Quant MK 0.964 NA NA NA 0.160
Quant SR 0.005 NA NA NA 0.001
g VA 1.056 NA NA NA 0.666
g RC 1.461 NA NA NA 0.657
g WK 1.156 NA NA NA 0.529
g AR 1.437 NA NA NA 0.871
g DI 1.201 NA NA NA 0.816
g MK 1.778 NA NA NA 0.785
g SR 1.908 NA NA NA 0.756
JKTI A1 0.726 NA NA NA 0.228
JKTI A2 0.610 NA NA NA 0.180
JKTI A3 0.357 NA NA NA 0.105
JKTI A4 1.004 NA NA NA 0.299
JKTII A5 1.397 NA NA NA 0.286
JKTII A6 0.718 NA NA NA 0.134
JKTII A7 0.866 NA NA NA 0.159
JKTII A8 1.510 NA NA NA 0.328
JKTIII A9 0.451 NA NA NA 0.134
JKTIII A10 0.892 NA NA NA 0.241
JKTIII A11 0.809 NA NA NA 0.215
WSI CF1 2.981 NA NA NA 0.392
WSI CF2 2.600 NA NA NA 0.451
WSI CF3 2.084 NA NA NA 0.423
WSII CF4 2.104 NA NA NA 0.367
WSII CF5 1.712 NA NA NA 0.365
WSII CF6 1.279 NA NA NA 0.268
WG IC 1.446 NA NA NA 0.423
WG AI 1.073 NA NA NA 0.366
WG A1 1.056 NA NA NA 0.461
WG A2 1.004 NA NA NA 0.413
WG A3 1.001 NA NA NA 0.408
WG A4 1.068 NA NA NA 0.442
WG A5 1.589 NA NA NA 0.452
WG A6 1.633 NA NA NA 0.423
WG A7 1.671 NA NA NA 0.428
WG A8 1.292 NA NA NA 0.391
WG A9 1.145 NA NA NA 0.471
WG A10 1.172 NA NA NA 0.441
WG A11 1.153 NA NA NA 0.427
WG CF1 1.533 NA NA NA 0.281
WG CF2 1.229 NA NA NA 0.296
WG CF3 1.189 NA NA NA 0.336
WG CF4 1.120 NA NA NA 0.272
WG CF5 0.697 NA NA NA 0.207
WG CF6 1.036 NA NA NA 0.302
GHI g 2.473 NA NA NA 0.927
GHI WG 0.967 NA NA NA 0.695
round(cbind(HOF = fitMeasures(HOF.fit, FITS),
            HOFREG = fitMeasures(HOFREG.fit, FITS),
            HOFRREG = fitMeasures(HOFRREG.fit, FITS),
            CHCHOF = fitMeasures(CHCHOF.fit, FITS),
            BF = fitMeasures(BF.fit, FITS),
            BFREG = fitMeasures(BFREG.fit, FITS),
            BFRREG = fitMeasures(BFRREG.fit, FITS),
            CHCBF = fitMeasures(CHCBF.fit, FITS)),3)
##                       HOF     HOFREG    HOFRREG     CHCHOF         BF
## chisq            2452.119   2452.119   2452.119   2452.119   2132.810
## df                290.000    290.000    290.000    289.000    273.000
## npar               61.000     61.000     61.000     62.000     78.000
## cfi                 0.916      0.916      0.916      0.916      0.928
## rmsea               0.047      0.047      0.047      0.047      0.045
## rmsea.ci.lower      0.045      0.045      0.045      0.045      0.043
## rmsea.ci.upper      0.048      0.048      0.048      0.048      0.046
## bic2           503137.423 503137.423 503137.423 503142.386 502902.473
##                     BFREG     BFRREG      CHCBF
## chisq            2132.810   2132.810   2132.810
## df                273.000    273.000    272.000
## npar               78.000     78.000     79.000
## cfi                 0.928      0.928      0.928
## rmsea               0.045      0.045      0.045
## rmsea.ci.lower      0.043      0.043      0.043
## rmsea.ci.upper      0.046      0.046      0.046
## bic2           502902.473 502902.473 502907.435
#Plots

semPaths(HOF.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree2", exoVar = F, exoCov = T)

semPaths(HOFREG.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree3", exoVar = F, exoCov = F)

semPaths(HOFRREG.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree", exoVar = F, exoCov = F)

semPaths(CHCHOF.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree2", exoVar = F, exoCov = F)

#semPaths(BF.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree3", exoVar = F, exoCov = F, bifactor = c("g", "WG")) #r between g's = 0.64, ~identical parameters as other BF models
suppressWarnings(semPaths(BFREG.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree2", exoVar = F, exoCov = F, bifactor = c("g", "WG")))

suppressWarnings(semPaths(BFRREG.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "circle2", exoVar = F, exoCov = F, bifactor = c("g", "WG")))

suppressWarnings(semPaths(CHCBF.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree3", exoVar = F, exoCov = F, bifactor = c("g", "WG", "GHI")))

suppressWarnings(semPaths(CHCBF.fit, "model", "std", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "circle3", exoVar = F, exoCov = F, bifactor = c("g", "WG", "GHI")))

Mediation Models

#Mediation models

MEDMI.model <- '
Verbal =~ VA + RC + WK
Quant =~ AR + DI + MK + SR
g =~ Verbal + Quant

JKP =~ IC + AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6

JKP ~ g
JKTI ~ g + JKP
JKTII ~ g + JKTI
JKTIII ~ g+ JKTII
WSI ~ g + JKP + JKTII
WSII ~ g + WSI + JKTIII'

MEDMI.fit <- sem(MEDMI.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T, check.gradient = F, control=list(rel.tol=1e-4))

MEDMII.model <- '
Verbal =~ VA + RC + WK
Quant =~ AR + DI + MK + SR
g =~ Verbal + Quant

JKP =~ IC + AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6

JKP ~ g
JKTI ~ g + JKP
JKTII ~ g + JKTI
JKTIII ~ g + JKTII
WSI ~ JKP + JKTII
WSII ~ JKTIII + WSI'

MEDMII.fit <- sem(MEDMII.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T, check.gradient = F, control=list(rel.tol=1e-4))

MEDMIII.model <- '
Verbal =~ VA + RC + WK
Quant =~ AR + DI + MK + SR
g =~ Verbal + Quant

JKP =~ IC + AI
JKTI =~ A1 + A2 + A3 + A4
JKTII =~ A5 + A6 + A7 + A8
JKTIII =~ A9 + A10 + A11
WSI =~ CF1 + CF2 + CF3
WSII =~ CF4 + CF5 + CF6

JKP ~ g
JKTI ~ g 
JKTII ~ g + JKTI
JKTIII ~ g + JKTII
WSI ~ JKP + JKTII
WSII ~ WSI'

MEDMIII.fit <- sem(MEDMIII.model, sample.cov = dat.cov, sample.nobs = 3428, std.lv = T, orthogonal = T, check.gradient = F, control=list(rel.tol=1e-4))
parameterEstimates(MEDMI.fit, stand = T) %>% 
  filter(op == "~") %>% select('Dependent' = lhs, "Independent" = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Model Paths")
Model Paths
Dependent Independent B SE Z p-value Beta
JKP g 0.824 0.036 23.066 0.000 0.636
JKTI g 0.837 0.056 15.021 0.000 0.640
JKTI JKP 0.007 0.031 0.220 0.826 0.007
JKTII g -0.196 0.101 -1.929 0.054 -0.095
JKTII JKTI 1.459 0.162 9.010 0.000 0.931
JKTIII g 0.463 0.148 3.136 0.002 0.133
JKTIII JKTII 1.506 0.439 3.429 0.001 0.884
WSI g -0.131 0.051 -2.576 0.010 -0.108
WSI JKP 0.192 0.033 5.843 0.000 0.205
WSI JKTII 0.312 0.034 9.281 0.000 0.528
WSII g 0.092 0.096 0.954 0.340 0.038
WSII WSI 1.723 0.362 4.758 0.000 0.873
WSII JKTIII 0.030 0.037 0.789 0.430 0.043
parameterEstimates(MEDMI.fit, stand = T) %>% 
  filter(op == "~") %>% select('Dependent' = lhs, "Independent" = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Model Paths")
Model Paths
Dependent Independent B SE Z p-value Beta
JKP g 0.824 0.036 23.066 0.000 0.636
JKTI g 0.837 0.056 15.021 0.000 0.640
JKTI JKP 0.007 0.031 0.220 0.826 0.007
JKTII g -0.196 0.101 -1.929 0.054 -0.095
JKTII JKTI 1.459 0.162 9.010 0.000 0.931
JKTIII g 0.463 0.148 3.136 0.002 0.133
JKTIII JKTII 1.506 0.439 3.429 0.001 0.884
WSI g -0.131 0.051 -2.576 0.010 -0.108
WSI JKP 0.192 0.033 5.843 0.000 0.205
WSI JKTII 0.312 0.034 9.281 0.000 0.528
WSII g 0.092 0.096 0.954 0.340 0.038
WSII WSI 1.723 0.362 4.758 0.000 0.873
WSII JKTIII 0.030 0.037 0.789 0.430 0.043
parameterEstimates(MEDMII.fit, stand = T) %>% 
  filter(op == "~") %>% select('Dependent' = lhs, "Independent" = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Model Paths")
Model Paths
Dependent Independent B SE Z p-value Beta
JKP g 0.821 0.036 23.088 0.000 0.635
JKTI g 0.843 0.056 15.095 0.000 0.642
JKTI JKP 0.011 0.031 0.365 0.715 0.011
JKTII g -0.271 0.112 -2.414 0.016 -0.128
JKTII JKTI 1.551 0.184 8.412 0.000 0.960
JKTIII g 0.479 0.156 3.065 0.002 0.133
JKTIII JKTII 1.503 0.468 3.209 0.001 0.888
WSI JKP 0.137 0.024 5.733 0.000 0.149
WSI JKTII 0.268 0.030 9.044 0.000 0.478
WSII JKTIII 0.050 0.030 1.673 0.094 0.078
WSII WSI 1.640 0.316 5.196 0.000 0.857
parameterEstimates(MEDMIII.fit, stand = T) %>% 
  filter(op == "~") %>% select('Dependent' = lhs, "Independent" = rhs, B = est, SE = se, Z = z, 'p-value' = pvalue, Beta = std.all) %>% 
  kable(digits = 3, format = "pandoc", caption = "Model Paths")
Model Paths
Dependent Independent B SE Z p-value Beta
JKP g 0.822 0.035 23.481 0.000 0.635
JKTI g 0.852 0.045 18.824 0.000 0.649
JKTII g -0.275 0.113 -2.433 0.015 -0.129
JKTII JKTI 1.560 0.186 8.368 0.000 0.961
JKTIII g 0.479 0.161 2.978 0.003 0.130
JKTIII JKTII 1.532 0.491 3.121 0.002 0.891
WSI JKP 0.140 0.024 5.866 0.000 0.150
WSI JKTII 0.281 0.030 9.433 0.000 0.496
WSII WSI 1.795 0.341 5.258 0.000 0.908
round(cbind(MEDMI = fitMeasures(MEDMI.fit, FITS),
            MEDMII = fitMeasures(MEDMII.fit, FITS),
            MEDMIII = fitMeasures(MEDMIII.fit, FITS)),3)
##                     MEDMI     MEDMII    MEDMIII
## chisq            1500.957   1509.660   1512.256
## df                284.000    286.000    288.000
## npar               67.000     65.000     63.000
## cfi                 0.953      0.952      0.952
## rmsea               0.035      0.035      0.035
## rmsea.ci.lower      0.034      0.034      0.033
## rmsea.ci.upper      0.037      0.037      0.037
## bic2           502216.034 502214.813 502207.485
semPaths(MEDMI.fit, "model", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree3", exoVar = F, exoCov = F)

semPaths(MEDMII.fit, "model", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree3", exoVar = F, exoCov = F)

semPaths(MEDMIII.fit, "model", title = F, residuals = F, groups = "AFLATS", pastel = T, mar = c(2, 1, 3, 1), layout = "tree3", exoVar = F, exoCov = F)

It does seem accurate to say that prior job knowledge has a limited role in skill acquisition and a minor one in performance dependent on skills acquired on the job. For clarity: prior knowledge has an obvious role when performance is required immediately.

Vector Correlations

describe(gvals)
##          vars n mean   sd median trimmed  mad  min  max range  skew kurtosis
## ï..Test*    1 7 4.00 2.16   4.00    4.00 2.97 1.00 7.00  6.00  0.00    -1.71
## CFAgL       2 7 0.76 0.05   0.76    0.76 0.06 0.70 0.81  0.11 -0.20    -1.80
## EFAgL       3 7 0.75 0.05   0.76    0.75 0.06 0.69 0.82  0.13 -0.19    -1.79
## Note*       4 7 1.14 0.38   1.00    1.14 0.00 1.00 2.00  1.00  1.62     0.80
## ICR         5 7 0.38 0.07   0.39    0.38 0.07 0.28 0.49  0.21  0.07    -1.48
## AIR         6 7 0.31 0.03   0.32    0.31 0.03 0.25 0.34  0.09 -0.94    -0.55
## A1R         7 7 0.24 0.03   0.24    0.24 0.01 0.18 0.28  0.10 -0.68    -0.60
## A2R         8 7 0.21 0.03   0.22    0.21 0.03 0.18 0.25  0.07 -0.04    -1.73
## A3R         9 7 0.19 0.02   0.19    0.19 0.01 0.16 0.23  0.07  0.20    -1.42
## A4R        10 7 0.23 0.03   0.23    0.23 0.03 0.17 0.27  0.10 -0.55    -0.91
## A5R        11 7 0.18 0.04   0.19    0.18 0.04 0.11 0.23  0.12 -0.61    -1.01
## A6R        12 7 0.15 0.03   0.14    0.15 0.04 0.10 0.19  0.09 -0.16    -1.45
## A7R        13 7 0.18 0.04   0.17    0.18 0.03 0.12 0.23  0.11  0.01    -1.59
## A8R        14 7 0.17 0.03   0.18    0.17 0.03 0.12 0.20  0.08 -0.66    -1.42
## A9R        15 7 0.20 0.02   0.20    0.20 0.03 0.17 0.22  0.05 -0.22    -1.94
## A10R       16 7 0.21 0.04   0.21    0.21 0.01 0.15 0.27  0.12  0.10    -0.61
## A11R       17 7 0.19 0.04   0.19    0.19 0.06 0.12 0.23  0.11 -0.61    -1.09
## CF1R       18 7 0.07 0.05   0.08    0.07 0.07 0.00 0.14  0.14 -0.03    -1.87
## CF2R       19 7 0.11 0.04   0.11    0.11 0.04 0.04 0.16  0.12 -0.23    -1.58
## CF3R       20 7 0.13 0.04   0.12    0.13 0.04 0.06 0.19  0.13 -0.06    -1.43
## CF4R       21 7 0.09 0.05   0.11    0.09 0.06 0.00 0.15  0.15 -0.35    -1.66
## CF5R       22 7 0.06 0.03   0.07    0.06 0.03 0.01 0.10  0.09 -0.38    -1.49
## CF6R       23 7 0.12 0.04   0.11    0.12 0.06 0.06 0.18  0.12 -0.06    -1.67
##            se
## ï..Test* 0.82
## CFAgL    0.02
## EFAgL    0.02
## Note*    0.14
## ICR      0.03
## AIR      0.01
## A1R      0.01
## A2R      0.01
## A3R      0.01
## A4R      0.01
## A5R      0.02
## A6R      0.01
## A7R      0.02
## A8R      0.01
## A9R      0.01
## A10R     0.01
## A11R     0.02
## CF1R     0.02
## CF2R     0.02
## CF3R     0.02
## CF4R     0.02
## CF5R     0.01
## CF6R     0.02
describe(MCVs)
##           vars  n  mean   sd median trimmed  mad   min   max range  skew
## Criteria*    1 19 10.00 5.63  10.00   10.00 7.41  1.00 19.00 18.00  0.00
## gCFA         2 19  0.32 0.32   0.33    0.31 0.48 -0.11  0.82  0.93  0.01
## gEFA         3 19  0.34 0.30   0.38    0.34 0.43 -0.07  0.84  0.91 -0.04
## gAVG         4 19  0.33 0.31   0.35    0.33 0.47 -0.09  0.83  0.92 -0.02
## gCFASp       5 19  0.32 0.28   0.28    0.31 0.30 -0.07  0.88  0.95  0.16
## gEFASp       6 19  0.35 0.29   0.36    0.34 0.30 -0.09  0.90  0.99  0.03
## gAVGSp       7 19  0.33 0.28   0.32    0.32 0.30 -0.02  0.89  0.91  0.18
## gCFAFc       8 19  0.96 0.05   0.98    0.97 0.02  0.81  1.00  0.19 -1.69
## gEFAFc       9 19  0.96 0.05   0.98    0.97 0.01  0.81  1.00  0.19 -1.71
## gAVGFc      10 19  0.96 0.05   0.98    0.97 0.02  0.81  1.00  0.19 -1.70
##           kurtosis   se
## Criteria*    -1.39 1.29
## gCFA         -1.65 0.07
## gEFA         -1.63 0.07
## gAVG         -1.64 0.07
## gCFASp       -1.12 0.06
## gEFASp       -1.30 0.07
## gAVGSp       -1.28 0.06
## gCFAFc        1.81 0.01
## gEFAFc        1.87 0.01
## gAVGFc        1.84 0.01
mean(MCVs$gAVG)
## [1] 0.3298947
mean(MCVs$gAVGSp)
## [1] 0.3347632
mean(MCVs$gAVGFc)
## [1] 0.9630789
print(PEAR <- ggplot(MCVs, aes(x = Criteria, y = gAVG, fill = Criteria)) + geom_bar(stat = "identity", show.legend = F) + coord_flip() + scale_fill_hue(c = 40) + theme_bw() + ylab("Pearson MCV Correlation") + xlab("Criteria"))

print(SPEAR <- ggplot(MCVs, aes(x = Criteria, y = gAVGSp, fill = Criteria)) + geom_bar(stat = "identity", show.legend = F) + coord_flip() + scale_fill_hue(c = 40) + theme_bw() + ylab("Spearman MCV Correlation") + xlab("Criteria"))

print(TUCK <- ggplot(MCVs, aes(x = Criteria, y = gAVGFc-1, fill = Criteria)) + geom_bar(stat = "identity", show.legend = F) + coord_flip() + scale_fill_hue(c = 40) + theme_bw() + ylab("Tucker's Congruence Coefficient - 1") + xlab("Criteria") + geom_hline(yintercept = -0.01, linetype = "longdash", color = "darkred", size = 1) + geom_hline(yintercept = -0.05, linetype = "dashed", color = "darkred", size = 1) + geom_hline(yintercept = -0.10, color = "darkred", linetype = "dotted", size = 1))

#grid.arrange(PEAR, SPEAR, TUCK, nrow = 3)

The correlations between the work knowledge, but not the flight check, variables, were greater for more g loaded subtests. The g loadings and the subtest correlations were, in some cases, clearly, and in other cases, arguably or clearly not, congruent.

References

Ree, M. J., Carretta, T. R., & Teachout, M. S. (1995). Role of ability and prior knowledge in complex training performance. Journal of Applied Psychology, 80(6), 721-730. https://doi.org/10.1037/0021-9010.80.6.721