library(pacman); p_load(lavaan, psych)
lowerWhite <- '
1
0.29 1
0.22 0.36 1
0.3 0.47 0.45 1
0.34 0.4 0.21 0.36 1
0.39 0.37 0.31 0.42 0.38 1
0.4 0.3 0.24 0.32 0.32 0.39 1
0.15 0.18 0.17 0.22 0.21 0.18 0.18 1
0.39 0.5 0.37 0.54 0.49 0.45 0.35 0.22 1
0.38 0.22 0.23 0.28 0.23 0.31 0.31 0.17 0.31 1
0.46 0.45 0.23 0.38 0.49 0.4 0.35 0.34 0.49 0.3 1
0.41 0.45 0.2 0.41 0.49 0.38 0.3 0.27 0.52 0.25 0.84 1
0.44 0.51 0.26 0.38 0.54 0.44 0.36 0.27 0.6 0.31 0.69 0.7 1'
lowerBlack <- '
1
0.34 1
0.22 0.4 1
0.33 0.56 0.48 1
0.36 0.41 0.24 0.37 1
0.37 0.44 0.31 0.46 0.36 1
0.45 0.35 0.24 0.36 0.29 0.4 1
0.16 0.14 0.08 0.15 0.17 0.22 0.17 1
0.37 0.55 0.4 0.54 0.42 0.48 0.37 0.17 1
0.4 0.32 0.23 0.34 0.26 0.32 0.38 0.14 0.33 1
0.42 0.46 0.24 0.43 0.46 0.39 0.33 0.23 0.47 0.33 1
0.4 0.47 0.24 0.43 0.46 0.39 0.33 0.19 0.49 0.32 0.91 1
0.46 0.47 0.26 0.42 0.5 0.42 0.36 0.23 0.53 0.31 0.71 0.7 1'
Names = list("BenderGestalt", "Information", "Comprehension", "Vocabulary", "DigitSpan", "PictureArrangement", "BlockDesign", "Coding", "ITPA", "DrawAMan", "Spelling", "Reading", "Arithmetic")
White.cor = getCov(lowerWhite, names = Names)
Black.cor = getCov(lowerBlack, names = Names)
WhiteSDs <- c(3.3, 3, 2.92, 2.88, 2.87, 3.12, 2.7, 2.78, 2.82, 13.55, 6.1, 12.43, 3.5)
BlackSDs <- c(3.68, 2.64, 2.56, 2.73, 2.94, 2.75, 2.44, 2.89, 3.38, 13.68, 5.34, 10.07, 4.1)
White.cov = lavaan::cor2cov(White.cor, WhiteSDs)
Black.cov = lavaan::cor2cov(Black.cor, BlackSDs)
WhiteMeans <- c(23.9, 9.8, 9.5, 10.08, 10.52, 10.64, 10.46, 10.53, 19.3, 96.23, 27.15, 40.24, 21.45)
BlackMeans <- c(21.5, 8.73, 8.36, 7.7, 9.19, 8.52, 8.74, 10.04, 16.36, 94.77, 22.91, 31.81, 19.36)
WhiteN <- 1940
BlackN <- 1460
GCovs <- list(White.cov, Black.cov)
GMeans <- list(WhiteMeans, BlackMeans)
GNs <- list(WhiteN, BlackN)
FITM <- c("chisq", "df", "nPar", "cfi", "rmsea", "rmsea.ci.lower", "rmsea.ci.upper", "aic", "bic")
SDI2.UDI2 = function(p, loading1, loading2, intercept1, intercept2, stdev2, #From Gunn, Grimm & Edwards (2019)
fmean2, fsd2, nodewidth = 0.01, lowerLV = -5, upperLV = 5) {
LV = seq(lowerLV,upperLV,nodewidth)
DiffExpItem12 = matrix(NA,length(LV),p)
pdfLV2 = matrix(NA,length(LV),1)
SDI2numerator = matrix(NA,length(LV),p)
UDI2numerator = matrix(NA,length(LV),p)
SDI2 = matrix(NA,p,1)
UDI2 = matrix(NA,p,1)
for(j in 1:p){
for(k in 1:length(LV)){
DiffExpItem12[k,j] <- (intercept1[j]-intercept2[j]) + (loading1[j]-loading2[j])*LV[k]
pdfLV2[k] = dnorm(LV[k], mean=fmean2, sd=fsd2)
SDI2numerator[k,j] = DiffExpItem12[k,j]*pdfLV2[k]*nodewidth
UDI2numerator[k,j] = abs(SDI2numerator[k,j])
}
SDI2[j] <- sum(SDI2numerator[,j])/stdev2[j]
UDI2[j] <- sum(UDI2numerator[,j])/stdev2[j]
}
colnames(SDI2) = "SDI2"
colnames(UDI2) = "UDI2"
return(list(SDI2=round(SDI2,4), UDI2=round(UDI2,4)))}
SUDI <- function(SDI, UDI){
D <- ifelse(SDI < 0, -1, 1)
H = D * UDI
return(H)}
Nichols (1970) presented probably the first meaningful examination of Spearman’s hypothesis. In his study, he used a rarely accessed, large dataset, the Collaborative Study of Cerebral Palsy, Mental Retardation, and Other Neurological and Sensory Disorders of Infancy and Childhood, to assess the effects of genes and environments on intelligence test performance in samples of American Blacks and Whites. Jensen never tested Spearman’s hypothesis in this data as far as I know, so I will assess it here so the data isn’t basically useless.
Exploratory analyses were conducted with the White group, since it was the larger one, and thus had more precise estimates. Fit confirmation was assessed in the Black group, and if found adequate, multigroup modeling would commence. \(\chi^2\) was the preferred test of fit, followed by AIC and then BIC, but for the higher-order model, BIC took precedence, followed by AIC and \(\chi^2\), because this is generally how they perform for this type of model.
fa.parallel(White.cor, n.obs = WhiteN)
## Parallel analysis suggests that the number of factors = 4 and the number of components = 2
print(fa(White.cor, n.obs = WhiteN, nfactors = 4), cut = .3, sort = T)
## Loading required namespace: GPArotation
## Factor Analysis using method = minres
## Call: fa(r = White.cor, nfactors = 4, n.obs = WhiteN)
## Standardized loadings (pattern matrix) based upon correlation matrix
## item MR1 MR2 MR3 MR4 h2 u2 com
## Spelling 11 1.02 1.00 0.0046 1.0
## Reading 12 0.73 0.77 0.2345 1.2
## Coding 8 0.13 0.8681 1.8
## Vocabulary 4 0.74 0.59 0.4147 1.0
## Comprehension 3 0.64 0.38 0.6211 1.1
## Information 2 0.46 0.45 0.5485 1.7
## ITPA 9 0.42 0.36 0.61 0.3948 2.2
## BenderGestalt 1 0.69 0.48 0.5217 1.1
## BlockDesign 7 0.56 0.36 0.6436 1.1
## DrawAMan 10 0.55 0.30 0.6975 1.1
## PictureArrangement 6 0.42 0.41 0.5917 1.8
## Arithmetic 13 0.32 0.47 0.73 0.2736 2.2
## DigitSpan 5 0.37 0.43 0.5744 2.0
##
## MR1 MR2 MR3 MR4
## SS loadings 2.11 1.82 1.69 1.00
## Proportion Var 0.16 0.14 0.13 0.08
## Cumulative Var 0.16 0.30 0.43 0.51
## Proportion Explained 0.32 0.27 0.25 0.15
## Cumulative Proportion 0.32 0.59 0.85 1.00
##
## With factor correlations of
## MR1 MR2 MR3 MR4
## MR1 1.00 0.46 0.60 0.55
## MR2 0.46 1.00 0.60 0.43
## MR3 0.60 0.60 1.00 0.43
## MR4 0.55 0.43 0.43 1.00
##
## Mean item complexity = 1.5
## Test of the hypothesis that 4 factors are sufficient.
##
## The degrees of freedom for the null model are 78 and the objective function was 5.44 with Chi Square of 10515.96
## The degrees of freedom for the model are 32 and the objective function was 0.06
##
## The root mean square of the residuals (RMSR) is 0.01
## The df corrected root mean square of the residuals is 0.02
##
## The harmonic number of observations is 1940 with the empirical chi square 47.17 with prob < 0.041
## The total number of observations was 1940 with Likelihood Chi Square = 113.65 with prob < 4.5e-11
##
## Tucker Lewis Index of factoring reliability = 0.981
## RMSEA index = 0.036 and the 90 % confidence intervals are 0.029 0.044
## BIC = -128.6
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy
## MR1 MR2 MR3 MR4
## Correlation of (regression) scores with factors 1.00 0.89 0.88 0.83
## Multiple R square of scores with factors 1.00 0.78 0.77 0.69
## Minimum correlation of possible factor scores 0.99 0.57 0.54 0.39
To avoid cross-loadings, only the highest loadings for an item will be used.
NicholsModel <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan'
NicholsInitFit <- cfa(NicholsModel, sample.cov = Black.cov, sample.mean = BlackMeans, sample.nobs = BlackN, std.lv = T, orthogonal = F, meanstructure = T)
summary(NicholsInitFit, stand = T, fit = T)
## lavaan 0.6-12 ended normally after 35 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of model parameters 45
##
## Number of observations 1460
##
## Model Test User Model:
##
## Test statistic 325.443
## Degrees of freedom 59
## P-value (Chi-square) 0.000
##
## Model Test Baseline Model:
##
## Test statistic 8761.378
## Degrees of freedom 78
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.969
## Tucker-Lewis Index (TLI) 0.959
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -48243.624
## Loglikelihood unrestricted model (H1) -48080.902
##
## Akaike (AIC) 96577.247
## Bayesian (BIC) 96815.126
## Sample-size adjusted Bayesian (BIC) 96672.175
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.056
## 90 Percent confidence interval - lower 0.050
## 90 Percent confidence interval - upper 0.062
## P-value RMSEA <= 0.05 0.056
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.038
##
## 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
## Achievement =~
## Spelling 5.127 0.106 48.519 0.000 5.127 0.960
## Reading 9.535 0.201 47.370 0.000 9.535 0.947
## Coding 0.664 0.076 8.711 0.000 0.664 0.230
## Verbal =~
## Vocabulary 2.029 0.066 30.922 0.000 2.029 0.744
## Comprehension 1.380 0.067 20.637 0.000 1.380 0.539
## Information 1.959 0.063 30.861 0.000 1.959 0.742
## ITPA 2.563 0.081 31.762 0.000 2.563 0.758
## Spatial =~
## BenderGestalt 2.376 0.096 24.813 0.000 2.376 0.646
## BlockDesign 1.523 0.064 23.813 0.000 1.523 0.624
## DrawAMan 7.554 0.367 20.592 0.000 7.554 0.552
## PicturArrngmnt 1.805 0.071 25.317 0.000 1.805 0.657
## STM =~
## Arithmetic 3.428 0.100 34.210 0.000 3.428 0.836
## DigitSpan 1.757 0.074 23.619 0.000 1.757 0.598
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Achievement ~~
## Verbal 0.625 0.020 31.531 0.000 0.625 0.625
## Spatial 0.619 0.022 27.986 0.000 0.619 0.619
## STM 0.870 0.016 55.641 0.000 0.870 0.870
## Verbal ~~
## Spatial 0.804 0.019 42.143 0.000 0.804 0.804
## STM 0.768 0.021 36.245 0.000 0.768 0.768
## Spatial ~~
## STM 0.775 0.023 33.189 0.000 0.775 0.775
##
## Intercepts:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Spelling 22.910 0.140 163.987 0.000 22.910 4.292
## .Reading 31.810 0.263 120.742 0.000 31.810 3.160
## .Coding 10.040 0.076 132.789 0.000 10.040 3.475
## .Vocabulary 7.700 0.071 107.809 0.000 7.700 2.821
## .Comprehension 8.360 0.067 124.822 0.000 8.360 3.267
## .Information 8.730 0.069 126.397 0.000 8.730 3.308
## .ITPA 16.360 0.088 185.009 0.000 16.360 4.842
## .BenderGestalt 21.500 0.096 223.314 0.000 21.500 5.844
## .BlockDesign 8.740 0.064 136.914 0.000 8.740 3.583
## .DrawAMan 94.770 0.358 264.795 0.000 94.770 6.930
## .PicturArrngmnt 8.520 0.072 118.422 0.000 8.520 3.099
## .Arithmetic 19.360 0.107 180.487 0.000 19.360 4.724
## .DigitSpan 9.190 0.077 119.479 0.000 9.190 3.127
## Achievement 0.000 0.000 0.000
## Verbal 0.000 0.000 0.000
## Spatial 0.000 0.000 0.000
## STM 0.000 0.000 0.000
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Spelling 2.212 0.274 8.082 0.000 2.212 0.078
## .Reading 10.418 0.982 10.605 0.000 10.418 0.103
## .Coding 7.905 0.293 26.950 0.000 7.905 0.947
## .Vocabulary 3.330 0.159 20.929 0.000 3.330 0.447
## .Comprehension 4.646 0.185 25.046 0.000 4.646 0.709
## .Information 3.126 0.149 20.970 0.000 3.126 0.449
## .ITPA 4.850 0.238 20.335 0.000 4.850 0.425
## .BenderGestalt 7.889 0.356 22.174 0.000 7.889 0.583
## .BlockDesign 3.631 0.160 22.717 0.000 3.631 0.610
## .DrawAMan 129.946 5.392 24.099 0.000 129.946 0.695
## .PicturArrngmnt 4.300 0.197 21.872 0.000 4.300 0.569
## .Arithmetic 5.045 0.394 12.800 0.000 5.045 0.300
## .DigitSpan 5.551 0.225 24.698 0.000 5.551 0.643
## Achievement 1.000 1.000 1.000
## Verbal 1.000 1.000 1.000
## Spatial 1.000 1.000 1.000
## STM 1.000 1.000 1.000
Looks great.
NicholsConfiguralHOF <- cfa(NicholsModelG, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = T)
NicholsModelGII <- ' #g kills STM because it is poorly-defined, and thus needs to be extreme to recapitulate its relationships with the other factors. This is a case where we might see a large discrepancy between raw data and correlation matrices
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM'
NicholsMetricHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = "loadings")
NicholsPartialMetricHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = "loadings",
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement"))
NicholsScalarHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement")) #Throws a meaningless warning
## Warning in lav_model_vcov(lavmodel = lavmodel, lavsamplestats = lavsamplestats, : lavaan WARNING:
## The variance-covariance matrix of the estimated parameters (vcov)
## does not appear to be positive definite! The smallest eigenvalue
## (= 5.309577e-15) is close to zero. This may be a symptom that the
## model is not identified.
NicholsPartialScalarHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1")) #Throws a meaningless warning
## Warning in lav_model_vcov(lavmodel = lavmodel, lavsamplestats = lavsamplestats, : lavaan WARNING:
## The variance-covariance matrix of the estimated parameters (vcov)
## does not appear to be positive definite! The smallest eigenvalue
## (= 2.765595e-15) is close to zero. This may be a symptom that the
## model is not identified.
NicholsStrictHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1"))
NicholsPartialStrictHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
## Warning in lav_model_vcov(lavmodel = lavmodel, lavsamplestats = lavsamplestats, : lavaan WARNING:
## The variance-covariance matrix of the estimated parameters (vcov)
## does not appear to be positive definite! The smallest eigenvalue
## (= 1.522729e-13) is close to zero. This may be a symptom that the
## model is not identified.
NicholsLVHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsMeanHOF <- cfa(NicholsModelGII, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances", "means"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
round(cbind(CONFIGURAL = fitMeasures(NicholsConfiguralHOF, FITM),
METRIC = fitMeasures(NicholsMetricHOF, FITM),
"PARTIAL METRIC" = fitMeasures(NicholsPartialMetricHOF, FITM),
SCALAR = fitMeasures(NicholsScalarHOF, FITM),
"PARTIAL SCALAR" = fitMeasures(NicholsPartialScalarHOF, FITM),
STRICT = fitMeasures(NicholsStrictHOF, FITM),
"PARTIAL STRICT" = fitMeasures(NicholsPartialStrictHOF, FITM),
LVARS = fitMeasures(NicholsLVHOF, FITM),
MEANS = fitMeasures(NicholsMeanHOF, FITM)), 3)
## CONFIGURAL METRIC PARTIAL METRIC SCALAR PARTIAL SCALAR
## chisq 1091.912 1192.176 1115.204 1472.468 1131.713
## df 122.000 136.000 131.000 139.000 135.000
## npar 86.000 72.000 77.000 69.000 73.000
## cfi 0.949 0.945 0.949 0.930 0.948
## rmsea 0.068 0.068 0.066 0.075 0.066
## rmsea.ci.lower 0.065 0.064 0.063 0.072 0.062
## rmsea.ci.upper 0.072 0.071 0.070 0.079 0.069
## aic 227708.171 227780.435 227713.463 228054.728 227721.972
## bic 228235.483 228221.905 228185.591 228477.803 228169.574
## STRICT PARTIAL STRICT LVARS MEANS
## chisq 1707.956 1137.883 1149.211 2075.663
## df 148.000 137.000 141.000 146.000
## npar 60.000 71.000 67.000 62.000
## cfi 0.919 0.948 0.947 0.899
## rmsea 0.079 0.066 0.065 0.088
## rmsea.ci.lower 0.075 0.062 0.061 0.085
## rmsea.ci.upper 0.082 0.069 0.068 0.092
## aic 228272.215 227724.142 227727.471 228643.922
## bic 228640.107 228159.481 228138.283 229024.077
To test Spearman’s hypothesis, the strong (only g), weak (g plus specific abilities), and contra (specific abilities only) models need to be compared. To do this, constraints are placed on specific factor means. For the strong model, every group factor (i.e., every factor that is not g) is constrained; for the weak model, specific abilities are constrainted iteratively and more constraints are added, with some means still allowed to vary in each model, and; in the contra model, g plus a specific ability is constrained. The reason a specific ability is constrained in addition to g is to differentiate the model from the weak model with another degree of freedom. This form of the model also simply recapitulates the correlated group factor model and disperses g variance among the group factors, inflating the mean differences in those factors so that all observed mean differences are maintained regardless of model. This “special” form of the contra model in which only g is constrained is for these reasons not valid, but it can still be investigated.
NicholsModelGIIStrong <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Verbal ~ c(0,0)*1
Spatial ~ c(0,0)*1
STM ~ c(0,0)*1'
NicholsModelGIIWeak1 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1'
NicholsModelGIIWeak2 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1'
NicholsModelGIIWeak3 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Spatial ~ c(0,0)*1'
NicholsModelGIIWeak4 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
STM ~ c(0,0)*1'
NicholsModelGIIWeak5 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Verbal ~ c(0,0)*1'
NicholsModelGIIWeak6 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Spatial ~ c(0,0)*1'
NicholsModelGIIWeak7 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
STM ~ c(0,0)*1'
NicholsModelGIIWeak8 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Verbal ~ c(0,0)*1
Spatial ~ c(0,0)*1'
NicholsModelGIIWeak9 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Verbal ~ c(0,0)*1
STM ~ c(0,0)*1'
NicholsModelGIIWeak10 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Spatial ~ c(0,0)*1
STM ~ c(0,0)*1'
NicholsModelGIIWeak11 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1
Spatial ~ c(0,0)*1'
NicholsModelGIIWeak12 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1
STM ~ c(0,0)*1'
NicholsModelGIIWeak13 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1
Spatial ~ c(0,0)*1
STM ~ c(0,0)*1'
NicholsModelGIIWeak14 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Spatial ~ c(0,0)*1
STM ~ c(0,0)*1'
NicholsModelGIIContra1 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra2 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra3 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Spatial ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra4 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
STM ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra5 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Verbal ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra6 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Spatial ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra7 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
STM ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra8 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Verbal ~ c(0,0)*1
Spatial ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra9 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Verbal ~ c(0,0)*1
STM ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra10 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Achievement ~ c(0,0)*1
Spatial ~ c(0,0)*1
STM ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra11 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1
Spatial ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra12 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1
STM ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra13 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Verbal ~ c(0,0)*1
Spatial ~ c(0,0)*1
STM ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContra14 <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
Spatial ~ c(0,0)*1
STM ~ c(0,0)*1
g ~ c(0,0)*1'
NicholsModelGIIContraSpecial <- '
Achievement =~ Spelling + Reading + Coding
Verbal =~ Vocabulary + Comprehension + Information + ITPA
Spatial =~ BenderGestalt + BlockDesign + DrawAMan + PictureArrangement
STM =~ Arithmetic + DigitSpan
g =~ Achievement + Verbal + Spatial + STM
STM ~~ 0*STM
g ~ c(0,0)*1'
NicholsHOFStrong <- cfa(NicholsModelGIIStrong, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak1 <- cfa(NicholsModelGIIWeak1, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak2 <- cfa(NicholsModelGIIWeak2, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak3 <- cfa(NicholsModelGIIWeak3, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak4 <- cfa(NicholsModelGIIWeak4, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak5 <- cfa(NicholsModelGIIWeak5, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak6 <- cfa(NicholsModelGIIWeak6, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak7 <- cfa(NicholsModelGIIWeak7, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak8 <- cfa(NicholsModelGIIWeak8, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak9 <- cfa(NicholsModelGIIWeak9, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak10 <- cfa(NicholsModelGIIWeak10, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak11 <- cfa(NicholsModelGIIWeak11, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak12 <- cfa(NicholsModelGIIWeak12, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak13 <- cfa(NicholsModelGIIWeak13, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFWeak14 <- cfa(NicholsModelGIIWeak14, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra1 <- cfa(NicholsModelGIIContra1, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra2 <- cfa(NicholsModelGIIContra2, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra3 <- cfa(NicholsModelGIIContra3, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra4 <- cfa(NicholsModelGIIContra4, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra5 <- cfa(NicholsModelGIIContra5, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra6 <- cfa(NicholsModelGIIContra6, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra7 <- cfa(NicholsModelGIIContra7, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra8 <- cfa(NicholsModelGIIContra8, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra9 <- cfa(NicholsModelGIIContra9, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra10 <- cfa(NicholsModelGIIContra10, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra11 <- cfa(NicholsModelGIIContra11, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra12 <- cfa(NicholsModelGIIContra12, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra13 <- cfa(NicholsModelGIIContra13, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContra14 <- cfa(NicholsModelGIIContra14, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
NicholsHOFContraSpecial <- cfa(NicholsModelGIIContraSpecial, sample.cov = GCovs, sample.mean = GMeans, sample.nobs = GNs, std.lv = F,
group.equal = c("loadings", "intercepts", "residuals", "lv.variances"),
group.partial = c(
"g =~ STM", "Achievement =~ Reading", "Verbal =~ ITPA", "STM =~ DigitSpan", "Spatial =~ PictureArrangement",
"DrawAMan ~ 1", "Information ~ 1", "Comprehension ~ 1", "Arithmetic ~ 1",
"Reading ~~ Reading", "Spelling ~~ Spelling", "Information ~~ Information", "ITPA ~~ ITPA", "Comprehension ~~ Comprehension", "BlockDesign ~~ BlockDesign", "Vocabulary ~~ Vocabulary", "BenderGestalt ~~ BenderGestalt", "PictureArrangement ~~ PictureArrangement", "Arithmetic ~~ Arithmetic", "Coding ~~ Coding"))
round(cbind(
LVARS = fitMeasures(NicholsLVHOF, FITM),
MEANS = fitMeasures(NicholsMeanHOF, FITM),
STRONG = fitMeasures(NicholsHOFStrong, FITM),
Weak1 = fitMeasures(NicholsHOFWeak1, FITM),
Weak2 = fitMeasures(NicholsHOFWeak2, FITM),
Weak3 = fitMeasures(NicholsHOFWeak3, FITM),
Weak4 = fitMeasures(NicholsHOFWeak4, FITM),
Weak5 = fitMeasures(NicholsHOFWeak5, FITM),
Weak6 = fitMeasures(NicholsHOFWeak6, FITM),
Weak7 = fitMeasures(NicholsHOFWeak7, FITM),
Weak8 = fitMeasures(NicholsHOFWeak8, FITM),
Weak9 = fitMeasures(NicholsHOFWeak9, FITM),
Weak10 = fitMeasures(NicholsHOFWeak10, FITM),
Weak11 = fitMeasures(NicholsHOFWeak11, FITM),
Weak12 = fitMeasures(NicholsHOFWeak12, FITM),
Weak13 = fitMeasures(NicholsHOFWeak13, FITM),
Weak14 = fitMeasures(NicholsHOFWeak14, FITM),
Contra1 = fitMeasures(NicholsHOFContra1, FITM),
Contra2 = fitMeasures(NicholsHOFContra2, FITM),
Contra3 = fitMeasures(NicholsHOFContra3, FITM),
Contra4 = fitMeasures(NicholsHOFContra4, FITM),
Contra5 = fitMeasures(NicholsHOFContra5, FITM),
Contra6 = fitMeasures(NicholsHOFContra6, FITM),
Contra7 = fitMeasures(NicholsHOFContra7, FITM),
Contra8 = fitMeasures(NicholsHOFContra8, FITM),
Contra9 = fitMeasures(NicholsHOFContra9, FITM),
Contra10 = fitMeasures(NicholsHOFContra10, FITM),
Contra11 = fitMeasures(NicholsHOFContra11, FITM),
Contra12 = fitMeasures(NicholsHOFContra12, FITM),
Contra13 = fitMeasures(NicholsHOFContra13, FITM),
Contra14 = fitMeasures(NicholsHOFContra14, FITM),
ContraSpecial = fitMeasures(NicholsHOFContraSpecial, FITM)), 3)
## LVARS MEANS STRONG Weak1 Weak2
## chisq 1149.211 2075.663 1300.047 1149.211 1149.211
## df 141.000 146.000 145.000 142.000 142.000
## npar 67.000 62.000 63.000 66.000 66.000
## cfi 0.947 0.899 0.940 0.947 0.947
## rmsea 0.065 0.088 0.068 0.065 0.065
## rmsea.ci.lower 0.061 0.085 0.065 0.061 0.061
## rmsea.ci.upper 0.068 0.092 0.072 0.068 0.068
## aic 227727.471 228643.922 227870.306 227725.471 227725.471
## bic 228138.283 229024.077 228256.593 228130.152 228130.152
## Weak3 Weak4 Weak5 Weak6 Weak7
## chisq 1149.211 1149.211 1224.246 1205.254 1165.124
## df 142.000 142.000 143.000 143.000 143.000
## npar 66.000 66.000 65.000 65.000 65.000
## cfi 0.947 0.947 0.944 0.945 0.947
## rmsea 0.065 0.065 0.067 0.066 0.065
## rmsea.ci.lower 0.061 0.061 0.063 0.063 0.061
## rmsea.ci.upper 0.068 0.068 0.070 0.070 0.068
## aic 227725.471 227725.471 227798.505 227779.513 227739.384
## bic 228130.152 228130.152 228197.055 228178.063 228137.933
## Weak8 Weak9 Weak10 Weak11 Weak12
## chisq 1243.825 1267.789 1242.218 1149.692 1237.215
## df 144.000 144.000 144.000 143.000 143.000
## npar 64.000 64.000 64.000 65.000 65.000
## cfi 0.943 0.941 0.943 0.947 0.943
## rmsea 0.067 0.068 0.067 0.064 0.067
## rmsea.ci.lower 0.064 0.064 0.064 0.061 0.064
## rmsea.ci.upper 0.070 0.071 0.070 0.068 0.071
## aic 227816.084 227840.048 227814.478 227723.951 227811.474
## bic 228208.502 228232.466 228206.896 228122.500 228210.024
## Weak13 Weak14 Contra1 Contra2 Contra3
## chisq 1242.872 1225.019 1600.147 1902.266 1752.696
## df 144.000 143.000 143.000 143.000 143.000
## npar 64.000 65.000 65.000 65.000 65.000
## cfi 0.943 0.944 0.924 0.908 0.916
## rmsea 0.067 0.067 0.077 0.085 0.081
## rmsea.ci.lower 0.064 0.063 0.074 0.082 0.078
## rmsea.ci.upper 0.070 0.070 0.081 0.088 0.085
## aic 227815.132 227799.279 228174.407 228476.526 228326.956
## bic 228207.550 228197.828 228572.956 228875.075 228725.505
## Contra4 Contra5 Contra6 Contra7 Contra8
## chisq 1315.936 1939.973 1830.948 1603.977 2060.262
## df 143.000 144.000 144.000 144.000 145.000
## npar 65.000 64.000 64.000 64.000 63.000
## cfi 0.939 0.906 0.912 0.924 0.900
## rmsea 0.069 0.086 0.083 0.077 0.088
## rmsea.ci.lower 0.066 0.082 0.080 0.074 0.085
## rmsea.ci.upper 0.073 0.089 0.086 0.081 0.092
## aic 227890.196 228512.232 228403.208 228176.236 228630.522
## bic 228288.745 228904.650 228795.626 228568.654 229016.808
## Contra9 Contra10 Contra11 Contra12 Contra13
## chisq 1944.389 1832.317 2059.022 1902.382 2071.273
## df 145.000 145.000 144.000 144.000 145.000
## npar 63.000 63.000 64.000 64.000 63.000
## cfi 0.906 0.912 0.900 0.908 0.899
## rmsea 0.085 0.083 0.088 0.085 0.088
## rmsea.ci.lower 0.082 0.079 0.085 0.081 0.085
## rmsea.ci.upper 0.089 0.086 0.092 0.088 0.092
## aic 228514.648 228402.576 228631.282 228474.641 228641.533
## bic 228900.935 228788.863 229023.700 228867.059 229027.819
## Contra14 ContraSpecial
## chisq 1758.470 1149.211
## df 144.000 142.000
## npar 64.000 66.000
## cfi 0.916 0.947
## rmsea 0.081 0.065
## rmsea.ci.lower 0.078 0.061
## rmsea.ci.upper 0.085 0.068
## aic 228330.730 227725.471
## bic 228723.148 228130.152
The most restrictive model possible was the eleventh weak model, constraining verbal and spatial ability, while leaving g free. Because of the variance constraint on STM, this is slightly less informative than it would be otherwise, but it’s no big deal because it wasn’t a substantive factor anyway, it was just one that replicated across groups. We can now inspect the mean differences:
summary(NicholsHOFWeak11, stand = T, fit = T)
## lavaan 0.6-12 ended normally after 162 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of model parameters 87
## Number of equality constraints 22
##
## Number of observations per group:
## Group 1 1940
## Group 2 1460
##
## Model Test User Model:
##
## Test statistic 1149.692
## Degrees of freedom 143
## P-value (Chi-square) 0.000
## Test statistic for each group:
## Group 1 665.340
## Group 2 484.351
##
## Model Test Baseline Model:
##
## Test statistic 19310.872
## Degrees of freedom 156
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.947
## Tucker-Lewis Index (TLI) 0.943
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -113796.975
## Loglikelihood unrestricted model (H1) -113222.130
##
## Akaike (AIC) 227723.951
## Bayesian (BIC) 228122.500
## Sample-size adjusted Bayesian (BIC) 227915.965
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.064
## 90 Percent confidence interval - lower 0.061
## 90 Percent confidence interval - upper 0.068
## P-value RMSEA <= 0.05 0.000
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.051
##
## Parameter Estimates:
##
## Standard errors Standard
## Information Expected
## Information saturated (h1) model Structured
##
##
## Group 1 [Group 1]:
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Achievement =~
## Spellng 1.000 5.368 0.913
## Reading 2.044 0.036 57.411 0.000 10.971 0.906
## Coding (.p3.) 0.150 0.008 17.967 0.000 0.804 0.293
## Verbal =~
## Vocblry 1.000 2.009 0.690
## Cmprhns (.p5.) 0.699 0.025 27.615 0.000 1.404 0.483
## Infrmtn (.p6.) 0.998 0.026 38.396 0.000 2.005 0.672
## ITPA 1.112 0.032 34.790 0.000 2.234 0.796
## Spatial =~
## BndrGst 1.000 2.247 0.676
## BlckDsg (.p9.) 0.689 0.021 33.356 0.000 1.549 0.577
## DrawAMn (.10.) 3.184 0.122 26.014 0.000 7.154 0.526
## PctrArr 0.891 0.035 25.364 0.000 2.001 0.643
## STM =~
## Arthmtc 1.000 2.932 0.849
## DigtSpn 0.617 0.021 28.732 0.000 1.809 0.626
## g =~
## Achvmnt 1.000 0.843 0.843
## Verbal (.15.) 0.364 0.010 37.928 0.000 0.820 0.820
## Spatial (.16.) 0.399 0.012 34.557 0.000 0.804 0.804
## STM 0.648 0.016 41.648 0.000 1.000 1.000
##
## Intercepts:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Verbal 0.000 0.000 0.000
## .Spatial 0.000 0.000 0.000
## .Spellng (.38.) 27.174 0.133 205.071 0.000 27.174 4.624
## .Reading (.39.) 39.979 0.261 152.889 0.000 39.979 3.303
## .Coding (.40.) 10.587 0.052 204.388 0.000 10.587 3.865
## .Vocblry (.41.) 10.033 0.060 165.865 0.000 10.033 3.448
## .Cmprhns 9.489 0.066 144.105 0.000 9.489 3.265
## .Infrmtn 9.784 0.067 144.968 0.000 9.784 3.279
## .ITPA (.44.) 19.290 0.062 309.199 0.000 19.290 6.877
## .BndrGst (.45.) 23.936 0.070 342.172 0.000 23.936 7.198
## .BlckDsg (.46.) 10.463 0.054 193.859 0.000 10.463 3.897
## .DrawAMn 96.203 0.307 313.193 0.000 96.203 7.076
## .PctrArr (.48.) 10.592 0.064 164.458 0.000 10.592 3.401
## .Arthmtc 21.430 0.078 274.164 0.000 21.430 6.204
## .DigtSpn (.50.) 10.507 0.065 160.611 0.000 10.507 3.640
## .Achvmnt 0.000 0.000 0.000
## .STM 0.000 0.000 0.000
## g 0.000 0.000 0.000
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .STM 0.000 0.000 0.000
## .Spellng 5.725 0.394 14.523 0.000 5.725 0.166
## .Reading 26.161 1.713 15.271 0.000 26.161 0.179
## .Coding 6.857 0.222 30.893 0.000 6.857 0.914
## .Vocblry 4.433 0.171 25.900 0.000 4.433 0.524
## .Cmprhns 6.472 0.220 29.424 0.000 6.472 0.766
## .Infrmtn 4.881 0.185 26.387 0.000 4.881 0.548
## .ITPA 2.878 0.142 20.261 0.000 2.878 0.366
## .BndrGst 6.009 0.245 24.521 0.000 6.009 0.543
## .BlckDsg 4.811 0.176 27.372 0.000 4.811 0.667
## .DrawAMn (.30.) 133.680 3.625 36.875 0.000 133.680 0.723
## .PctrArr 5.694 0.227 25.048 0.000 5.694 0.587
## .Arthmtc 3.339 0.172 19.399 0.000 3.339 0.280
## .DigtSpn (.33.) 5.063 0.136 37.306 0.000 5.063 0.608
## .Achvmnt (.34.) 8.331 0.376 22.172 0.000 0.289 0.289
## .Verbal (.35.) 1.323 0.080 16.455 0.000 0.328 0.328
## .Spatial (.36.) 1.789 0.127 14.052 0.000 0.354 0.354
## g (.37.) 20.481 0.783 26.155 0.000 1.000 1.000
##
##
## Group 2 [Group 2]:
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Achievement =~
## Spellng 1.000 5.368 0.962
## Reading 1.879 0.022 84.285 0.000 10.086 0.954
## Coding (.p3.) 0.150 0.008 17.967 0.000 0.804 0.275
## Verbal =~
## Vocblry 1.000 2.009 0.735
## Cmprhns (.p5.) 0.699 0.025 27.615 0.000 1.404 0.545
## Infrmtn (.p6.) 0.998 0.026 38.396 0.000 2.005 0.753
## ITPA 1.282 0.032 40.338 0.000 2.574 0.760
## Spatial =~
## BndrGst 1.000 2.247 0.628
## BlckDsg (.p9.) 0.689 0.021 33.356 0.000 1.549 0.633
## DrawAMn (.10.) 3.184 0.122 26.014 0.000 7.154 0.526
## PctrArr 0.808 0.027 29.580 0.000 1.817 0.653
## STM =~
## Arthmtc 1.000 3.487 0.836
## DigtSpn 0.533 0.021 25.354 0.000 1.857 0.637
## g =~
## Achvmnt 1.000 0.843 0.843
## Verbal (.15.) 0.364 0.010 37.928 0.000 0.820 0.820
## Spatial (.16.) 0.399 0.012 34.557 0.000 0.804 0.804
## STM 0.771 0.020 38.171 0.000 1.000 1.000
##
## Intercepts:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Verbal 0.000 0.000 0.000
## .Spatial 0.000 0.000 0.000
## .Spellng (.38.) 27.174 0.133 205.071 0.000 27.174 4.870
## .Reading (.39.) 39.979 0.261 152.889 0.000 39.979 3.782
## .Coding (.40.) 10.587 0.052 204.388 0.000 10.587 3.617
## .Vocblry (.41.) 10.033 0.060 165.865 0.000 10.033 3.674
## .Cmprhns 9.969 0.088 113.073 0.000 9.969 3.866
## .Infrmtn 11.028 0.090 122.664 0.000 11.028 4.139
## .ITPA (.44.) 19.290 0.062 309.199 0.000 19.290 5.692
## .BndrGst (.45.) 23.936 0.070 342.172 0.000 23.936 6.688
## .BlckDsg (.46.) 10.463 0.054 193.859 0.000 10.463 4.276
## .DrawAMn 102.766 0.461 222.954 0.000 102.766 7.558
## .PctrArr (.48.) 10.592 0.064 164.458 0.000 10.592 3.807
## .Arthmtc 21.833 0.201 108.618 0.000 21.833 5.236
## .DigtSpn (.50.) 10.507 0.065 160.611 0.000 10.507 3.601
## .Achvmnt 2.012 0.215 9.373 0.000 0.375 0.375
## .STM 2.389 0.216 11.078 0.000 0.685 0.685
## g -6.311 0.240 -26.341 0.000 -1.395 -1.395
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .STM 0.000 0.000 0.000
## .Spellng 2.320 0.263 8.808 0.000 2.320 0.075
## .Reading 10.035 0.959 10.462 0.000 10.035 0.090
## .Coding 7.920 0.294 26.929 0.000 7.920 0.925
## .Vocblry 3.424 0.157 21.757 0.000 3.424 0.459
## .Cmprhns 4.676 0.186 25.123 0.000 4.676 0.703
## .Infrmtn 3.077 0.146 21.008 0.000 3.077 0.433
## .ITPA 4.859 0.235 20.663 0.000 4.859 0.423
## .BndrGst 7.760 0.339 22.881 0.000 7.760 0.606
## .BlckDsg 3.588 0.158 22.699 0.000 3.588 0.599
## .DrawAMn (.30.) 133.680 3.625 36.875 0.000 133.680 0.723
## .PctrArr 4.442 0.202 21.947 0.000 4.442 0.574
## .Arthmtc 5.225 0.290 18.032 0.000 5.225 0.301
## .DigtSpn (.33.) 5.063 0.136 37.306 0.000 5.063 0.595
## .Achvmnt (.34.) 8.331 0.376 22.172 0.000 0.289 0.289
## .Verbal (.35.) 1.323 0.080 16.455 0.000 0.328 0.328
## .Spatial (.36.) 1.789 0.127 14.052 0.000 0.354 0.354
## g (.37.) 20.481 0.783 26.155 0.000 1.000 1.000
In this sample of 7-year-olds, there was a 1.395 Hedge’s g difference in g, a -.375 g difference in achievement, and a -.685 g difference in STM. That is, net of g, the Black group did better in the factor I dubbed short-term memory and in terms of a factor underlying achievement tests. That fits with most other studies residualizing for g. Oddly enough, the pattern of variance differences was not consistent with an additional “X Factor” or “Factor X” acting to suppress the scores of the Black group. Spelling, Reading, Coding, Vocabulary, Comprehension, Information, Picture Arrangement, and Arithmetic were more variable in the White group, and the ITPA and Bender Gestalt test were more variable in the Black group. Now lets see what bias did to the subtest means.
#Parameters for Achievement
Ap = 3; Al1 = c(0, 2.044, 0); Al2 = c(0, 1.879, 0); Ai1 = c(0, 0, 0)
Ai2 = c(0, 0, 0); Asd = c(6.1, 12.43, 10.53); Afm = -.375; Afsd = 1
#Parameters for Verbal
Vp = 4; Vl1 = c(0, 0, 0, 1.112); Vl2 = c(0, 0, 0, 1.282); Vi1 = c(0, 9.489, 9.784, 0)
Vi2 = c(0, 9.969, 11.028, 0); Vsd = c(2.88, 2.92, 3, 2.82); Vfm = 0; Vfsd = 1
#Parameters for Spatial
Sp = 4; Sl1 = c(0, 0, 0, .891); Sl2 = c(0, 0, 0, .808); Si1 = c(0, 0, 96.203, 0)
Si2 = c(0, 0, 102.766, 0); Ssd = c(3.3, 2.7, 13.55, 3.12); Sfm = 0; Sfsd = 1
#Parameters for STM
Mp = 2; Ml1 = c(0, .617); Ml2 = c(0, .533); Mi1 = c(21.430, 0)
Mi2 = c(21.833, 0); Msd = c(3.5, 2.87); Mfm = -.685; Mfsd = 1
AES <- SDI2.UDI2(Ap, Al1, Al2, Ai1, Ai2, Asd, Afm, Afsd)
VES <- SDI2.UDI2(Vp, Vl1, Vl2, Vi1, Vi2, Vsd, Vfm, Vfsd)
SES <- SDI2.UDI2(Sp, Sl1, Sl2, Si1, Si2, Ssd, Sfm, Sfsd)
MES <- SDI2.UDI2(Mp, Ml1, Ml2, Mi1, Mi2, Msd, Mfm, Mfsd)
SUDI(AES$SDI2, AES$UDI2); SUDI(VES$SDI2, VES$UDI2); SUDI(SES$SDI2, SES$UDI2); SUDI(MES$SDI2, MES$UDI2)
## SDI2
## [1,] 0.0000
## [2,] -0.0113
## [3,] 0.0000
## SDI2
## [1,] 0.0000
## [2,] -0.1644
## [3,] -0.4147
## [4,] 0.0481
## SDI2
## [1,] 0.0000
## [2,] 0.0000
## [3,] -0.4844
## [4,] 0.0212
## SDI2
## [1,] -0.1151
## [2,] -0.0286
With g out of the question, bias became more strongly favorable to the Black group. The subtests ITPA and picture arrangement became biased in favor of the White group, but only barely so (.0481 and .0212), whereas the reading, comprehension, information, draw-a-man, arithmetic, and digit span tests were biased in favor of the Black group to various degrees (in order, .0113, .1644, .4147, .4844, .1151, and .0286).
A very old study, never assessed for bias to my knowledge, turned out to allow mostly unbiased mean comparisons. The study is interesting, as it preempted the extensive nomothetic net construction around Spearman’s hypothesis undertaken by Jensen, some years later. With that said, it is odd that this study was not more widely cited and the data was not gathered again for reanalysis. Nichols’ was, as far as I know, the first study to realize the relevance and utility of correlating vectors of g loadings and heritabilities, and his correction by SES (and thus by the genes that lead to it, to the extent it is heritable, and genes confounded with IQ to the extent these overlap) is an interesting failure in an otherwise excellent manuscript. Overall, this was a very cool paper and it was neat to see that it supported Spearman’s weak hypothesis.
Gunn, H. J., Grimm, K. J., & Edwards, M. C. (2019). Evaluation of Six Effect Size Measures of Measurement Non-Invariance for Continuous Outcomes. Structural Equation Modeling: A Multidisciplinary Journal, 27(4), 503–514. https://doi.org/10.1080/10705511.2019.1689507
Nichols, P. L. (1970). The Effects of Heredity and Environment on Intelligence Test Performance in 4 and 7 Year White and Negro Sibling Pairs [Ph.D., University of Minnesota]. Retrieved September 14, 2022, from https://www.proquest.com/docview/302420679/citation/6030DF9E28D54A1DPQ/1
What was the vector correlation between heritability and group differences?
pca(White.cor[c(1, 3:13),c(1, 3:13)], nobs = WhiteN)
## Principal Components Analysis
## Call: principal(r = r, nfactors = nfactors, residuals = residuals,
## rotate = rotate, n.obs = n.obs, covar = covar, scores = scores,
## missing = missing, impute = impute, oblique.scores = oblique.scores,
## method = method, use = use, cor = cor, correct = 0.5, weight = NULL,
## nobs = ..1)
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 h2 u2 com
## BenderGestalt 0.63 0.40 0.60 1
## Comprehension 0.47 0.22 0.78 1
## Vocabulary 0.65 0.42 0.58 1
## DigitSpan 0.67 0.45 0.55 1
## PictureArrangement 0.65 0.42 0.58 1
## BlockDesign 0.57 0.32 0.68 1
## Coding 0.40 0.16 0.84 1
## ITPA 0.76 0.57 0.43 1
## DrawAMan 0.50 0.25 0.75 1
## Spelling 0.80 0.64 0.36 1
## Reading 0.78 0.61 0.39 1
## Arithmetic 0.81 0.65 0.35 1
##
## PC1
## SS loadings 5.11
## Proportion Var 0.43
##
## Mean item complexity = 1
## Test of the hypothesis that 1 component is sufficient.
##
## The root mean square of the residuals (RMSR) is 0.08
##
## Fit based upon off diagonal values = 0.95
DiffDF <- data.frame("Diff" = c(.86, .82, .73, .73, .56, .71, .46, .69, .67, .41, .11, .17), "H2" = c(.71, .69, .74, .6, .54, .29, .34, .23, .2, .09, .23, .14), "gL" = c(.65, .76, .78, .80, .81, .65, .67, .63, .57, .47, .50, .40),
"SESW" = c(.32, .29, .33, .3, .26, .27, .22, .23, .25, .18, .21, .06), "SESB" = c(.26, .23, .29, .25, .21, .16, .19, .17, .18, .16, .09, .10))
cor(DiffDF, method = "spearman")
## Diff H2 gL SESW SESB
## Diff 1.0000000 0.7824561 0.5859649 0.9106844 0.8105263
## H2 0.7824561 1.0000000 0.8175439 0.8966739 0.8736842
## gL 0.5859649 0.8175439 1.0000000 0.7460607 0.7807018
## SESW 0.9106844 0.8966739 0.7460607 1.0000000 0.8686528
## SESB 0.8105263 0.8736842 0.7807018 0.8686528 1.0000000
CONGO <- function(F1, F2) {
PHI = sum(F1*F2) / sqrt(sum(F1^2)*sum(F2^2))
return(PHI)}
CONGO(DiffDF$Diff, DiffDF$H2)
## [1] 0.9291203
CONGO(DiffDF$Diff, DiffDF$gL)
## [1] 0.9615351
CONGO(DiffDF$H2, DiffDF$gL)
## [1] 0.9311207