library(pacman); p_load(psych, lavaan, sjmisc)
CONGO <- function(F1, F2) {
PHI = sum(F1*F2) / sqrt(sum(F1^2)*sum(F2^2))
return(PHI)}
CRITR <- function(n, alpha = .05) {
df <- n - 2; CRITT <- qt(alpha/2, df, lower.tail = F)
CRITR <- sqrt((CRITT^2)/((CRITT^2) + df ))
return(CRITR)}
ZREG <- function(B1, B2, SEB1, SEB2) {
Z = (B1-B2)/sqrt((SEB1)^2 + (SEB2)^2)
return(Z)}
FITM <- c("chisq", "df", "nPar", "cfi", "rmsea", "rmsea.ci.lower", "rmsea.ci.upper", "srmr") #No AIC or BIC, unfortunately, because the estimator is DWLS due to the dichotomous items.
Data from Bates & Gignac (2022).
First analysis: the method of correlated vectors applied to this dataset.
data$incentive <- rec(data$sample, rec = "1 = 0; 2, 3 = 1") #Collapse
data$incentive2 <- rec(data$sample, rec = "1 = 0; 2 = 1; 3 = 2") #Full
tests = c("PFA1_r", "PFA2_r", "PFA3_r", "PFA4_r", "PFA5_r", "PFA6_r", "PFA7_r", "PFA8_r", "PFA9_r", "PFA10_r", "PFB1_r", "PFB2_r", "PFB3_r", "PFB4_r", "PFB5_r", "PFB6_r", "PFB7_r", "PFB8_r", "PFB9_r", "PFB10_r")
vars = c("effort_avg_time1", "effort_avg_time2", tests)
dataIO <- subset(data, incentive == 1)
round(cor(data[vars]), 3)
## effort_avg_time1 effort_avg_time2 PFA1_r PFA2_r PFA3_r PFA4_r
## effort_avg_time1 1.000 0.752 0.046 0.115 0.102 0.083
## effort_avg_time2 0.752 1.000 0.050 0.124 0.075 0.131
## PFA1_r 0.046 0.050 1.000 0.256 0.147 0.155
## PFA2_r 0.115 0.124 0.256 1.000 0.258 0.290
## PFA3_r 0.102 0.075 0.147 0.258 1.000 0.143
## PFA4_r 0.083 0.131 0.155 0.290 0.143 1.000
## PFA5_r 0.134 0.132 0.228 0.347 0.219 0.355
## PFA6_r 0.162 0.127 0.200 0.262 0.251 0.256
## PFA7_r 0.089 0.076 0.093 0.207 0.175 0.211
## PFA8_r 0.154 0.135 0.127 0.179 0.121 0.187
## PFA9_r 0.074 0.042 0.020 0.077 0.126 0.070
## PFA10_r 0.140 0.068 0.075 0.107 0.055 0.055
## PFB1_r 0.026 0.029 0.072 0.116 0.115 0.073
## PFB2_r 0.052 0.083 0.197 0.332 0.214 0.288
## PFB3_r 0.051 0.106 0.246 0.268 0.175 0.245
## PFB4_r 0.071 0.111 0.165 0.260 0.157 0.295
## PFB5_r -0.018 0.002 0.070 0.099 0.085 0.076
## PFB6_r 0.141 0.194 0.206 0.336 0.308 0.265
## PFB7_r 0.123 0.153 0.174 0.308 0.347 0.236
## PFB8_r 0.097 0.061 0.052 0.089 0.120 0.113
## PFB9_r 0.065 0.103 0.100 0.207 0.180 0.226
## PFB10_r 0.107 0.058 0.061 0.080 0.108 0.079
## PFA5_r PFA6_r PFA7_r PFA8_r PFA9_r PFA10_r PFB1_r PFB2_r
## effort_avg_time1 0.134 0.162 0.089 0.154 0.074 0.140 0.026 0.052
## effort_avg_time2 0.132 0.127 0.076 0.135 0.042 0.068 0.029 0.083
## PFA1_r 0.228 0.200 0.093 0.127 0.020 0.075 0.072 0.197
## PFA2_r 0.347 0.262 0.207 0.179 0.077 0.107 0.116 0.332
## PFA3_r 0.219 0.251 0.175 0.121 0.126 0.055 0.115 0.214
## PFA4_r 0.355 0.256 0.211 0.187 0.070 0.055 0.073 0.288
## PFA5_r 1.000 0.386 0.327 0.281 0.097 0.132 0.065 0.355
## PFA6_r 0.386 1.000 0.235 0.315 0.094 0.184 0.095 0.245
## PFA7_r 0.327 0.235 1.000 0.330 0.189 0.193 0.026 0.207
## PFA8_r 0.281 0.315 0.330 1.000 0.192 0.376 0.127 0.205
## PFA9_r 0.097 0.094 0.189 0.192 1.000 0.269 0.021 0.056
## PFA10_r 0.132 0.184 0.193 0.376 0.269 1.000 0.034 0.107
## PFB1_r 0.065 0.095 0.026 0.127 0.021 0.034 1.000 0.123
## PFB2_r 0.355 0.245 0.207 0.205 0.056 0.107 0.123 1.000
## PFB3_r 0.263 0.184 0.122 0.128 0.058 0.074 0.201 0.439
## PFB4_r 0.280 0.237 0.190 0.212 0.049 0.115 0.121 0.426
## PFB5_r 0.074 0.030 0.088 0.069 0.053 0.125 0.051 0.081
## PFB6_r 0.326 0.282 0.215 0.204 0.073 0.113 0.108 0.414
## PFB7_r 0.291 0.280 0.175 0.179 0.132 0.134 0.100 0.275
## PFB8_r 0.151 0.107 0.209 0.152 0.185 0.129 0.004 0.090
## PFB9_r 0.247 0.252 0.220 0.272 0.122 0.182 0.061 0.203
## PFB10_r 0.118 0.084 0.171 0.179 0.279 0.165 0.022 0.065
## PFB3_r PFB4_r PFB5_r PFB6_r PFB7_r PFB8_r PFB9_r PFB10_r
## effort_avg_time1 0.051 0.071 -0.018 0.141 0.123 0.097 0.065 0.107
## effort_avg_time2 0.106 0.111 0.002 0.194 0.153 0.061 0.103 0.058
## PFA1_r 0.246 0.165 0.070 0.206 0.174 0.052 0.100 0.061
## PFA2_r 0.268 0.260 0.099 0.336 0.308 0.089 0.207 0.080
## PFA3_r 0.175 0.157 0.085 0.308 0.347 0.120 0.180 0.108
## PFA4_r 0.245 0.295 0.076 0.265 0.236 0.113 0.226 0.079
## PFA5_r 0.263 0.280 0.074 0.326 0.291 0.151 0.247 0.118
## PFA6_r 0.184 0.237 0.030 0.282 0.280 0.107 0.252 0.084
## PFA7_r 0.122 0.190 0.088 0.215 0.175 0.209 0.220 0.171
## PFA8_r 0.128 0.212 0.069 0.204 0.179 0.152 0.272 0.179
## PFA9_r 0.058 0.049 0.053 0.073 0.132 0.185 0.122 0.279
## PFA10_r 0.074 0.115 0.125 0.113 0.134 0.129 0.182 0.165
## PFB1_r 0.201 0.121 0.051 0.108 0.100 0.004 0.061 0.022
## PFB2_r 0.439 0.426 0.081 0.414 0.275 0.090 0.203 0.065
## PFB3_r 1.000 0.328 0.135 0.362 0.216 0.014 0.155 0.026
## PFB4_r 0.328 1.000 0.094 0.368 0.264 0.081 0.204 0.065
## PFB5_r 0.135 0.094 1.000 0.113 0.170 0.048 0.065 0.072
## PFB6_r 0.362 0.368 0.113 1.000 0.412 0.097 0.274 0.094
## PFB7_r 0.216 0.264 0.170 0.412 1.000 0.143 0.272 0.114
## PFB8_r 0.014 0.081 0.048 0.097 0.143 1.000 0.099 0.229
## PFB9_r 0.155 0.204 0.065 0.274 0.272 0.099 1.000 0.143
## PFB10_r 0.026 0.065 0.072 0.094 0.114 0.229 0.143 1.000
cor(data$incentive, data[tests])
## PFA1_r PFA2_r PFA3_r PFA4_r PFA5_r PFA6_r
## [1,] -0.06146535 -0.03258912 0.001895143 -0.08841165 -0.05750572 -0.05037464
## PFA7_r PFA8_r PFA9_r PFA10_r PFB1_r PFB2_r
## [1,] -0.03387991 -0.06791671 -0.0005932086 -0.01815887 -0.04810072 -0.00529388
## PFB3_r PFB4_r PFB5_r PFB6_r PFB7_r PFB8_r
## [1,] -0.04827864 -0.0193202 -0.03983954 -0.004013605 -0.04671781 0.015179
## PFB9_r PFB10_r
## [1,] -0.08899386 0.003029902
cor(data$incentive2, data[tests], method = "spearman")
## PFA1_r PFA2_r PFA3_r PFA4_r PFA5_r PFA6_r
## [1,] -0.03700627 -0.03279588 -0.01651275 -0.07141417 -0.05051213 -0.04135374
## PFA7_r PFA8_r PFA9_r PFA10_r PFB1_r PFB2_r
## [1,] -0.02326079 -0.05518952 0.01438373 -0.007213661 -0.05595623 0.002212548
## PFB3_r PFB4_r PFB5_r PFB6_r PFB7_r PFB8_r
## [1,] -0.0261309 -0.01808831 -0.02169745 -0.0006196901 -0.04525231 0.02676853
## PFB9_r PFB10_r
## [1,] -0.08979483 0.02407979
cor(data$PFA_total, data$PFB_total)
## [1] 0.6461932
print(pca(data[tests], nfactors = 1), digits = 3)
## 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)
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 h2 u2 com
## PFA1_r 0.386 0.1489 0.851 1
## PFA2_r 0.577 0.3335 0.667 1
## PFA3_r 0.465 0.2165 0.784 1
## PFA4_r 0.523 0.2736 0.726 1
## PFA5_r 0.637 0.4058 0.594 1
## PFA6_r 0.562 0.3162 0.684 1
## PFA7_r 0.487 0.2371 0.763 1
## PFA8_r 0.506 0.2565 0.743 1
## PFA9_r 0.267 0.0715 0.928 1
## PFA10_r 0.338 0.1144 0.886 1
## PFB1_r 0.223 0.0499 0.950 1
## PFB2_r 0.619 0.3834 0.617 1
## PFB3_r 0.522 0.2725 0.728 1
## PFB4_r 0.563 0.3166 0.683 1
## PFB5_r 0.218 0.0476 0.952 1
## PFB6_r 0.646 0.4167 0.583 1
## PFB7_r 0.583 0.3394 0.661 1
## PFB8_r 0.276 0.0762 0.924 1
## PFB9_r 0.487 0.2376 0.762 1
## PFB10_r 0.267 0.0714 0.929 1
##
## PC1
## SS loadings 4.585
## Proportion Var 0.229
##
## Mean item complexity = 1
## Test of the hypothesis that 1 component is sufficient.
##
## The root mean square of the residuals (RMSR) is 0.07
## with the empirical chi square 2503.909 with prob < 0
##
## Fit based upon off diagonal values = 0.877
print(pca(data[tests[1:10]], nfactors = 1), digits = 3)
## 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)
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 h2 u2 com
## PFA1_r 0.405 0.164 0.836 1
## PFA2_r 0.582 0.339 0.661 1
## PFA3_r 0.451 0.204 0.796 1
## PFA4_r 0.532 0.283 0.717 1
## PFA5_r 0.688 0.473 0.527 1
## PFA6_r 0.638 0.408 0.592 1
## PFA7_r 0.576 0.332 0.668 1
## PFA8_r 0.602 0.363 0.637 1
## PFA9_r 0.330 0.109 0.891 1
## PFA10_r 0.422 0.178 0.822 1
##
## PC1
## SS loadings 2.852
## Proportion Var 0.285
##
## Mean item complexity = 1
## Test of the hypothesis that 1 component is sufficient.
##
## The root mean square of the residuals (RMSR) is 0.1
## with the empirical chi square 1210.325 with prob < 1.45e-231
##
## Fit based upon off diagonal values = 0.79
print(pca(data[tests[11:20]], nfactors = 1), digits = 3)
## 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)
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 h2 u2 com
## PFB1_r 0.280 0.0783 0.922 1
## PFB2_r 0.705 0.4976 0.502 1
## PFB3_r 0.635 0.4038 0.596 1
## PFB4_r 0.655 0.4287 0.571 1
## PFB5_r 0.268 0.0720 0.928 1
## PFB6_r 0.726 0.5277 0.472 1
## PFB7_r 0.618 0.3819 0.618 1
## PFB8_r 0.230 0.0531 0.947 1
## PFB9_r 0.482 0.2321 0.768 1
## PFB10_r 0.226 0.0511 0.949 1
##
## PC1
## SS loadings 2.726
## Proportion Var 0.273
##
## Mean item complexity = 1
## Test of the hypothesis that 1 component is sufficient.
##
## The root mean square of the residuals (RMSR) is 0.088
## with the empirical chi square 935.703 with prob < 9e-174
##
## Fit based upon off diagonal values = 0.816
CONGO(c(.386, .577, .465, .523, .637, .562, .487, .506, .267, .338, .223, .619, .522, .563, .218, .646, .583, .276, .487, .267), c(.405, .582, .451, .532, .688, .638, .576, .602, .330, .422, .280, .705, .635, .655, .268, .726, .718, .230, .482, .226))
## [1] 0.9962547
MCVData <- data.frame("Effort1" = c(.046, .115, .102, .083, .134, .162, .089, .154, .074, .140, .026, .052, .051, .071, -.018, .141, .123, .097, .065, .107),
"Effort2" = c(.050, .124, .075, .131, .132, .127, .076, .135, .042, .068, .029, .083, .106, .111, .002, .194, .153, .061, .103, .058),
"Importance1" = c(-.062, .095, .118, .060, .099, .080, .058, .065, .015, .022, .061, .043, .043, .054, -.013, .098, .099, .036, .044, .041),
"Importance2" = c(-.018, .063, .117, .055, .079, .052, .035, .052, .021, .006, .068, .040, .077, .065, .025, .142, .136, .058, .023, .056),
"Incentive1" = c(-.061, -.033, .002, -.088, -.058, -.050, -.034, -.068, -.001, -.018, -.048, -.005, -.048, -.019, -.040, -.004, -.047, .015, -.089, .003), #comes from vector correlations, point-biserial
"Incentive2" = c(-.037, -.033, -.017, -.071, -.051, -.041, -.023, -.055, .014, -.007, -.056, .002, -.026, -.018, -.022, -.001, -.045, .027, -.090, .024), #same as above but with differences of degree, so it's a Spearman correlation
"gPCA" = c(.386, .577, .465, .523, .637, .562, .487, .506, .267, .338, .223, .619, .522, .563, .218, .646, .583, .276, .487, .267))
"Full"
## [1] "Full"
round(cor(MCVData, method = "spearman"), 3)
## Effort1 Effort2 Importance1 Importance2 Incentive1 Incentive2
## Effort1 1.000 0.641 0.557 0.276 0.101 0.032
## Effort2 0.641 1.000 0.716 0.515 -0.326 -0.370
## Importance1 0.557 0.716 1.000 0.751 -0.143 -0.390
## Importance2 0.276 0.515 0.751 1.000 0.179 -0.040
## Incentive1 0.101 -0.326 -0.143 0.179 1.000 0.933
## Incentive2 0.032 -0.370 -0.390 -0.040 0.933 1.000
## gPCA 0.439 0.883 0.629 0.484 -0.190 -0.204
## gPCA
## Effort1 0.439
## Effort2 0.883
## Importance1 0.629
## Importance2 0.484
## Incentive1 -0.190
## Incentive2 -0.204
## gPCA 1.000
"Time 2"
## [1] "Time 2"
round(cor(MCVData[11:20, ], method = "spearman"), 3)
## Effort1 Effort2 Importance1 Importance2 Incentive1 Incentive2 gPCA
## Effort1 1.000 0.661 0.438 0.467 0.511 0.370 0.576
## Effort2 0.661 1.000 0.699 0.624 -0.036 -0.091 0.879
## Importance1 0.438 0.699 1.000 0.669 -0.338 -0.480 0.584
## Importance2 0.467 0.624 0.669 1.000 0.061 -0.030 0.479
## Incentive1 0.511 -0.036 -0.338 0.061 1.000 0.967 0.140
## Incentive2 0.370 -0.091 -0.480 -0.030 0.967 1.000 0.127
## gPCA 0.576 0.879 0.584 0.479 0.140 0.127 1.000
"Full"
## [1] "Full"
CONGO(MCVData$Effort1, MCVData$g)
## [1] 0.918309
CONGO(MCVData$Effort2, MCVData$g)
## [1] 0.9702032
CONGO(MCVData$Importance1, MCVData$g)
## [1] 0.859707
CONGO(MCVData$Importance2, MCVData$g)
## [1] 0.8672869
CONGO(MCVData$Incentive1, MCVData$g)
## [1] -0.7719833
CONGO(MCVData$Incentive2, MCVData$g)
## [1] -0.7009912
"Time 2"
## [1] "Time 2"
CONGO(MCVData$Effort1[11:20], MCVData$g[11:20])
## [1] 0.8816419
CONGO(MCVData$Effort2[11:20], MCVData$g[11:20])
## [1] 0.9590556
CONGO(MCVData$Importance1[11:20], MCVData$g[11:20])
## [1] 0.9137078
CONGO(MCVData$Importance2[11:20], MCVData$g[11:20])
## [1] 0.9005769
CONGO(MCVData$Incentive1[11:20], MCVData$g[11:20])
## [1] -0.6537027
CONGO(MCVData$Incentive2[11:20], MCVData$g[11:20])
## [1] -0.5126509
Second analysis - invariance between experimental timegroups, at either timepoint. I will first test whether the small and large incentive groups show measurement invariance.
FormA <- '
theta =~ PFA1_r + PFA2_r + PFA3_r + PFA4_r + PFA5_r + PFA6_r + PFA7_r + PFA8_r + PFA9_r + PFA10_r'
FormAFit <- cfa(FormA, data, std.lv = T, estimator = "DWLS")
FormAFitC <- cfa(FormA, dataIO, std.lv = T, estimator = "DWLS", group = "incentive2")
FormAFitM <- cfa(FormA, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = "loadings")
FormAFitS <- cfa(FormA, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts"))
FormAFitR <- cfa(FormA, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts", "residuals"))
FormAFitL <- cfa(FormA, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts", "residuals", "lv.variances"))
FormAFitA <- cfa(FormA, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts", "residuals", "lv.variances", "means"))
round(cbind("Configural" = fitMeasures(FormAFitC, FITM),
"Metric" = fitMeasures(FormAFitM, FITM),
"Scalar" = fitMeasures(FormAFitS, FITM),
"Strict" = fitMeasures(FormAFitR, FITM),
"Latent Variances" = fitMeasures(FormAFitL, FITM),
"Means" = fitMeasures(FormAFitA, FITM)), 3)
## Configural Metric Scalar Strict Latent Variances Means
## chisq 189.413 208.305 216.082 222.917 224.470 225.596
## df 70.000 79.000 88.000 98.000 99.000 100.000
## npar 60.000 51.000 42.000 32.000 31.000 30.000
## cfi 0.946 0.942 0.942 0.944 0.943 0.943
## rmsea 0.060 0.059 0.055 0.052 0.052 0.051
## rmsea.ci.lower 0.050 0.049 0.046 0.043 0.043 0.043
## rmsea.ci.upper 0.070 0.069 0.065 0.061 0.061 0.060
## srmr 0.058 0.060 0.061 0.065 0.065 0.065
pchisq(208.305 - 189.413, 79 - 70, lower.tail = F); "Metric"
## [1] 0.02612702
## [1] "Metric"
pchisq(216.082 - 208.305, 88 - 79, lower.tail = F); "Scalar"
## [1] 0.5567662
## [1] "Scalar"
pchisq(222.917 - 216.082, 98 - 88, lower.tail = F); "Strict"
## [1] 0.7409247
## [1] "Strict"
pchisq(224.470 - 222.917, 99 - 98, lower.tail = F); "Latent Variance Homogeneity"
## [1] 0.2126931
## [1] "Latent Variance Homogeneity"
pchisq(225.596 - 224.470, 100 - 99, lower.tail = F); "Mean Homogeneity"
## [1] 0.2886302
## [1] "Mean Homogeneity"
FormB<- '
theta =~ PFB1_r + PFB2_r + PFB3_r + PFB4_r + PFB5_r + PFB6_r + PFB7_r + PFB8_r + PFB9_r + PFB10_r'
FormBFit <- cfa(FormB, dataIO, std.lv = T, estimator = "DWLS")
FormBFitC <- cfa(FormB, dataIO, std.lv = T, estimator = "DWLS", group = "incentive2")
FormBFitM <- cfa(FormB, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = "loadings")
FormBFitS <- cfa(FormB, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts"))
FormBFitR <- cfa(FormB, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts", "residuals"))
FormBFitL <- cfa(FormB, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts", "residuals", "lv.variances"))
FormBFitA <- cfa(FormB, dataIO, std.lv = F, estimator = "DWLS", group = "incentive2", group.equal = c("loadings", "intercepts", "residuals", "lv.variances", "means"))
round(cbind("Configural" = fitMeasures(FormBFitC, FITM),
"Metric" = fitMeasures(FormBFitM, FITM),
"Scalar" = fitMeasures(FormBFitS, FITM),
"Strict" = fitMeasures(FormBFitR, FITM),
"Latent Variances" = fitMeasures(FormBFitL, FITM),
"Means" = fitMeasures(FormBFitA, FITM)), 3)
## Configural Metric Scalar Strict Latent Variances Means
## chisq 112.833 129.787 138.278 149.757 150.283 151.420
## df 70.000 79.000 88.000 98.000 99.000 100.000
## npar 60.000 51.000 42.000 32.000 31.000 30.000
## cfi 0.973 0.968 0.968 0.967 0.968 0.968
## rmsea 0.036 0.037 0.035 0.033 0.033 0.033
## rmsea.ci.lower 0.023 0.025 0.023 0.022 0.022 0.022
## rmsea.ci.upper 0.048 0.048 0.045 0.044 0.043 0.043
## srmr 0.049 0.051 0.052 0.057 0.058 0.058
pchisq(129.787 - 112.833, 79 - 70, lower.tail = F); "Metric"
## [1] 0.04944122
## [1] "Metric"
pchisq(138.278 - 129.787, 88 - 79, lower.tail = F); "Scalar"
## [1] 0.4855196
## [1] "Scalar"
pchisq(149.757 - 138.278, 98 - 88, lower.tail = F); "Strict"
## [1] 0.321436
## [1] "Strict"
pchisq(150.283 - 149.757, 99 - 98, lower.tail = F); "Latent Variance Homogeneity"
## [1] 0.4682934
## [1] "Latent Variance Homogeneity"
pchisq(151.420 - 150.283, 100 - 99, lower.tail = F); "Mean Homogeneity"
## [1] 0.2862871
## [1] "Mean Homogeneity"
Despite p just under .05 for the metric model, it is highly unlikely these groups differ. That number is very likely chance, and one that appeared due to the suitably large sample size. These groups are almost indisputably comparable. However, it is odd that in both groups, only one parameter was strongly noninvariant, and it was not the same one both times. This could have reinforced the case for chance, but there’s no telling what the items were, so there’s no telling if they were the same or different, or related, and that’s especially true since the forms were different. In both cases, the noninvariant loading was higher in the group with the smaller incentives, but in the first place, they had no difference in incentives; they only did in the second, so there should not have been an initial difference, and the second was marginal. I’m going to chalk this up to chance and combine the groups, since resampling from either group once at random using the Stata Repsample package gave me the same result of one noninvariant parameter each time, although the loadings were higher and lower rather than higher and higher for the first group when I did that.
FormAFitM <- cfa(FormA, dataIO, std.lv = T, estimator = "DWLS", group = "incentive2", group.equal = "loadings", group.partial = c("theta =~ PFA1_r"))
fitMeasures(FormAFitC, FITM)
## chisq df npar cfi rmsea
## 189.413 70.000 60.000 0.946 0.060
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.050 0.070 0.058
fitMeasures(FormAFitM, FITM)
## chisq df npar cfi rmsea
## 196.777 78.000 52.000 0.946 0.057
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.047 0.067 0.059
pchisq(fitMeasures(FormAFitM, "chisq") - fitMeasures(FormAFitC, "chisq"), fitMeasures(FormAFitM, "df") - fitMeasures(FormAFitC, "df"), lower.tail = F)
## chisq
## 0.498
FormBFitM <- cfa(FormB, dataIO, std.lv = T, estimator = "DWLS", group = "incentive2", group.equal = "loadings", group.partial = c("theta =~ PFB9_r"))
fitMeasures(FormBFitC, FITM)
## chisq df npar cfi rmsea
## 112.833 70.000 60.000 0.973 0.036
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.023 0.048 0.049
fitMeasures(FormBFitM, FITM)
## chisq df npar cfi rmsea
## 118.347 78.000 52.000 0.975 0.033
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.020 0.045 0.050
pchisq(fitMeasures(FormBFitM, "chisq") - fitMeasures(FormBFitC, "chisq"), fitMeasures(FormBFitM, "df") - fitMeasures(FormBFitC, "df"), lower.tail = F)
## chisq
## 0.701
Third analysis - comparing the intervention and nonintervention groups.
FormA <- '
theta =~ PFA1_r + PFA2_r + PFA3_r + PFA4_r + PFA5_r + PFA6_r + PFA7_r + PFA8_r + PFA9_r + PFA10_r'
FormAFit <- cfa(FormA, data, std.lv = T, estimator = "DWLS")
FormAFitC <- cfa(FormA, data, std.lv = T, estimator = "DWLS", group = "incentive")
FormAFitM <- cfa(FormA, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = "loadings")
FormAFitS <- cfa(FormA, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts"))
FormAFitR <- cfa(FormA, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts", "residuals"))
FormAFitL <- cfa(FormA, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts", "residuals", "lv.variances"))
FormAFitA <- cfa(FormA, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts", "residuals", "lv.variances", "means"))
round(cbind("Configural" = fitMeasures(FormAFitC, FITM),
"Metric" = fitMeasures(FormAFitM, FITM),
"Scalar" = fitMeasures(FormAFitS, FITM),
"Strict" = fitMeasures(FormAFitR, FITM),
"Latent Variances" = fitMeasures(FormAFitL, FITM),
"Means" = fitMeasures(FormAFitA, FITM)), 3)
## Configural Metric Scalar Strict Latent Variances Means
## chisq 253.519 256.704 265.013 301.728 308.059 334.797
## df 70.000 79.000 88.000 98.000 99.000 100.000
## npar 60.000 51.000 42.000 32.000 31.000 30.000
## cfi 0.937 0.939 0.939 0.930 0.928 0.919
## rmsea 0.062 0.058 0.055 0.056 0.056 0.059
## rmsea.ci.lower 0.054 0.050 0.047 0.048 0.049 0.052
## rmsea.ci.upper 0.071 0.066 0.062 0.063 0.063 0.066
## srmr 0.056 0.056 0.057 0.065 0.066 0.068
pchisq(256.704 - 253.519, 79 - 70, lower.tail = F); "Metric"
## [1] 0.9565062
## [1] "Metric"
pchisq(265.013 - 256.704, 88 - 79, lower.tail = F); "Scalar"
## [1] 0.5033313
## [1] "Scalar"
pchisq(301.728 - 265.013, 98 - 88, lower.tail = F); "Strict"
## [1] 6.339024e-05
## [1] "Strict"
pchisq(308.059 - 301.728, 99 - 98, lower.tail = F); "Latent Variance Homogeneity"
## [1] 0.01186454
## [1] "Latent Variance Homogeneity"
pchisq(334.797 - 308.059, 100 - 99, lower.tail = F); "Mean Homogeneity"
## [1] 2.329942e-07
## [1] "Mean Homogeneity"
FormB<- '
theta =~ PFB1_r + PFB2_r + PFB3_r + PFB4_r + PFB5_r + PFB6_r + PFB7_r + PFB8_r + PFB9_r + PFB10_r'
FormBFit <- cfa(FormB, data, std.lv = T, estimator = "DWLS")
FormBFitC <- cfa(FormB, data, std.lv = T, estimator = "DWLS", group = "incentive")
FormBFitM <- cfa(FormB, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = "loadings")
FormBFitS <- cfa(FormB, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts"))
FormBFitR <- cfa(FormB, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts", "residuals"))
FormBFitL <- cfa(FormB, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts", "residuals", "lv.variances"))
FormBFitA <- cfa(FormB, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts", "residuals", "lv.variances", "means"))
round(cbind("Configural" = fitMeasures(FormBFitC, FITM),
"Metric" = fitMeasures(FormBFitM, FITM),
"Scalar" = fitMeasures(FormBFitS, FITM),
"Strict" = fitMeasures(FormBFitR, FITM),
"Latent Variances" = fitMeasures(FormBFitL, FITM),
"Means" = fitMeasures(FormBFitA, FITM)), 3)
## Configural Metric Scalar Strict Latent Variances Means
## chisq 141.971 231.352 246.687 266.049 267.948 276.791
## df 70.000 79.000 88.000 98.000 99.000 100.000
## npar 60.000 51.000 42.000 32.000 31.000 30.000
## cfi 0.966 0.928 0.925 0.921 0.920 0.917
## rmsea 0.039 0.053 0.052 0.050 0.050 0.051
## rmsea.ci.lower 0.030 0.046 0.044 0.043 0.043 0.044
## rmsea.ci.upper 0.048 0.062 0.059 0.058 0.058 0.058
## srmr 0.046 0.059 0.060 0.075 0.075 0.076
pchisq(231.352 - 141.971, 79 - 70, lower.tail = F); "Metric"
## [1] 2.166897e-15
## [1] "Metric"
pchisq(246.687 - 231.352, 88 - 79, lower.tail = F); "Scalar"
## [1] 0.08213562
## [1] "Scalar"
pchisq(266.049 - 246.687, 98 - 88, lower.tail = F); "Strict"
## [1] 0.03589846
## [1] "Strict"
pchisq(267.948 - 266.049, 99 - 98, lower.tail = F); "Latent Variance Homogeneity"
## [1] 0.1681903
## [1] "Latent Variance Homogeneity"
pchisq(276.791 - 267.948, 100 - 99, lower.tail = F); "Mean Homogeneity"
## [1] 0.002942151
## [1] "Mean Homogeneity"
FormAFitR <- cfa(FormA, data, std.lv = F, estimator = "DWLS", group = "incentive", group.equal = c("loadings", "intercepts", "residuals"), group.partial = c("PFA8_r ~~ PFA8_r", "PFA3_r ~~ PFA3_r", "PFA4_r ~~ PFA4_r"))
fitMeasures(FormAFitS, FITM)
## chisq df npar cfi rmsea
## 265.013 88.000 42.000 0.939 0.055
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.047 0.062 0.057
fitMeasures(FormAFitR, FITM)
## chisq df npar cfi rmsea
## 277.025 95.000 35.000 0.937 0.053
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.046 0.061 0.063
pchisq(fitMeasures(FormAFitR, "chisq") - fitMeasures(FormAFitS, "chisq"), fitMeasures(FormAFitR, "df") - fitMeasures(FormAFitS, "df"), lower.tail = F)
## chisq
## 0.1
Since there’s only one mean and one latent variance, the other two models do not need to be fitted.
FormBFitM <- cfa(FormB, data, std.lv = T, estimator = "DWLS", group = "incentive", group.equal = "loadings", group.partial = c("theta =~ PFB1_r", "theta =~ PFB5_r", "theta =~ PFB3_r", "theta =~ PFB7_r"))
fitMeasures(FormBFitC, FITM)
## chisq df npar cfi rmsea
## 141.971 70.000 60.000 0.966 0.039
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.030 0.048 0.046
fitMeasures(FormBFitM, FITM)
## chisq df npar cfi rmsea
## 150.628 75.000 55.000 0.964 0.039
## rmsea.ci.lower rmsea.ci.upper srmr
## 0.030 0.048 0.048
pchisq(fitMeasures(FormBFitM, "chisq") - fitMeasures(FormBFitC, "chisq"), fitMeasures(FormBFitM, "df") - fitMeasures(FormBFitC, "df"), lower.tail = F)
## chisq
## 0.124
It is actually hard to make anything of these estimates, either. Apparently the incentive affected the interpretation of some of the items, but not much else. The later partial models could not be fitted due to convergence issues.
This cannot be tested for a simple reason: different forms were used in different time points. A strategy aimed at reducing practice effects that makes sense because others have found smaller practice effects with different forms of the same tests, also makes it impossible to test for longitudinal invariance in the sense of the same instrument measuring the same factors over time. This is unfortunate, and makes it so causal inference is more complicated in this experiment, contrary to its intent. It is exactly the wrong decision because of the implied psychometric intractability of the results. Try to run the model: it is highly biased.
We can try to work through this differently, by looking at the correlation between forms, under the assumption that merely trying harder does not actually improve ability but, in fact, as Lubinski (2000) suggested some things may do, affected the unique variances. Note that the PFA_total - PFB_total correlation is 0.646.
DualGModel <- '
g1 =~ PFA1_r + PFA2_r + PFA3_r + PFA4_r + PFA5_r + PFA6_r + PFA7_r + PFA8_r + PFA9_r + PFA10_r
g2 =~ PFB1_r + PFB2_r + PFB3_r + PFB4_r + PFB5_r + PFB6_r + PFB7_r + PFB8_r + PFB9_r + PFB10_r'
DualGFit <- cfa(DualGModel, data, std.lv = T, estimator = "DWLS")
DualGFitC <- cfa(DualGModel, data, std.lv = T, estimator = "DWLS", group = "incentive") #Loading identification does not work
summary(DualGFit, stand = T, fit = T); summary(DualGFitC, stand = T, fit = T)
## lavaan 0.6-9 ended normally after 107 iterations
##
## Estimator DWLS
## Optimization method NLMINB
## Number of model parameters 41
##
## Number of observations 1351
##
## Model Test User Model:
##
## Test statistic 687.336
## Degrees of freedom 169
## P-value (Chi-square) 0.000
##
## Model Test Baseline Model:
##
## Test statistic 9669.945
## Degrees of freedom 190
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.945
## Tucker-Lewis Index (TLI) 0.939
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.048
## 90 Percent confidence interval - lower 0.044
## 90 Percent confidence interval - upper 0.051
## P-value RMSEA <= 0.05 0.846
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.056
##
## Parameter Estimates:
##
## Standard errors Standard
## Information Expected
## Information saturated (h1) model Unstructured
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## g1 =~
## PFA1_r 0.095 0.005 20.973 0.000 0.095 0.333
## PFA2_r 0.260 0.007 35.059 0.000 0.260 0.547
## PFA3_r 0.217 0.007 29.263 0.000 0.217 0.434
## PFA4_r 0.237 0.007 32.078 0.000 0.237 0.492
## PFA5_r 0.311 0.008 40.243 0.000 0.311 0.629
## PFA6_r 0.242 0.007 35.174 0.000 0.242 0.548
## PFA7_r 0.193 0.006 32.130 0.000 0.193 0.440
## PFA8_r 0.237 0.007 32.190 0.000 0.237 0.475
## PFA9_r 0.052 0.004 14.460 0.000 0.052 0.196
## PFA10_r 0.122 0.006 20.753 0.000 0.122 0.289
## g2 =~
## PFB1_r 0.033 0.003 11.456 0.000 0.033 0.185
## PFB2_r 0.244 0.007 34.847 0.000 0.244 0.578
## PFB3_r 0.151 0.006 27.150 0.000 0.151 0.453
## PFB4_r 0.217 0.007 32.030 0.000 0.217 0.523
## PFB5_r 0.092 0.007 13.770 0.000 0.092 0.195
## PFB6_r 0.299 0.008 38.718 0.000 0.299 0.637
## PFB7_r 0.284 0.008 37.393 0.000 0.284 0.568
## PFB8_r 0.077 0.005 15.927 0.000 0.077 0.220
## PFB9_r 0.228 0.007 30.615 0.000 0.228 0.457
## PFB10_r 0.053 0.004 14.759 0.000 0.053 0.199
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## g1 ~~
## g2 0.889 0.019 46.972 0.000 0.889 0.889
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .PFA1_r 0.073 0.006 11.273 0.000 0.073 0.889
## .PFA2_r 0.159 0.006 28.608 0.000 0.159 0.701
## .PFA3_r 0.202 0.003 61.017 0.000 0.202 0.812
## .PFA4_r 0.176 0.005 35.465 0.000 0.176 0.758
## .PFA5_r 0.148 0.005 28.379 0.000 0.148 0.604
## .PFA6_r 0.136 0.007 20.767 0.000 0.136 0.700
## .PFA7_r 0.156 0.006 25.369 0.000 0.156 0.807
## .PFA8_r 0.193 0.004 54.168 0.000 0.193 0.774
## .PFA9_r 0.067 0.006 10.912 0.000 0.067 0.961
## .PFA10_r 0.164 0.006 25.997 0.000 0.164 0.917
## .PFB1_r 0.031 0.005 6.820 0.000 0.031 0.966
## .PFB2_r 0.118 0.007 16.789 0.000 0.118 0.666
## .PFB3_r 0.088 0.007 12.683 0.000 0.088 0.795
## .PFB4_r 0.125 0.007 17.911 0.000 0.125 0.727
## .PFB5_r 0.212 0.005 46.690 0.000 0.212 0.962
## .PFB6_r 0.131 0.006 20.543 0.000 0.131 0.594
## .PFB7_r 0.169 0.004 39.200 0.000 0.169 0.677
## .PFB8_r 0.115 0.007 16.823 0.000 0.115 0.951
## .PFB9_r 0.198 0.003 58.074 0.000 0.198 0.791
## .PFB10_r 0.068 0.006 11.039 0.000 0.068 0.961
## g1 1.000 1.000 1.000
## g2 1.000 1.000 1.000
## lavaan 0.6-9 ended normally after 113 iterations
##
## Estimator DWLS
## Optimization method NLMINB
## Number of model parameters 122
##
## Number of observations per group:
## 0 400
## 1 951
##
## Model Test User Model:
##
## Test statistic 823.109
## Degrees of freedom 338
## P-value (Chi-square) 0.000
## Test statistic for each group:
## 0 280.840
## 1 542.269
##
## Model Test Baseline Model:
##
## Test statistic 9870.366
## Degrees of freedom 380
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.949
## Tucker-Lewis Index (TLI) 0.943
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.046
## 90 Percent confidence interval - lower 0.042
## 90 Percent confidence interval - upper 0.050
## P-value RMSEA <= 0.05 0.944
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.056
##
## Parameter Estimates:
##
## Standard errors Standard
## Information Expected
## Information saturated (h1) model Unstructured
##
##
## Group 1 [0]:
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## g1 =~
## PFA1_r 0.066 0.007 9.202 0.000 0.066 0.271
## PFA2_r 0.228 0.014 16.054 0.000 0.228 0.487
## PFA3_r 0.197 0.014 13.762 0.000 0.197 0.393
## PFA4_r 0.229 0.014 16.350 0.000 0.229 0.500
## PFA5_r 0.308 0.015 20.246 0.000 0.308 0.632
## PFA6_r 0.235 0.013 17.838 0.000 0.235 0.558
## PFA7_r 0.190 0.012 15.790 0.000 0.190 0.421
## PFA8_r 0.216 0.014 15.026 0.000 0.216 0.432
## PFA9_r 0.049 0.007 7.217 0.000 0.049 0.186
## PFA10_r 0.107 0.012 9.235 0.000 0.107 0.249
## g2 =~
## PFB1_r -0.004 0.003 -1.417 0.156 -0.004 -0.029
## PFB2_r 0.242 0.014 17.743 0.000 0.242 0.576
## PFB3_r 0.113 0.010 11.529 0.000 0.113 0.372
## PFB4_r 0.187 0.013 14.759 0.000 0.187 0.461
## PFB5_r 0.043 0.013 3.268 0.001 0.043 0.091
## PFB6_r 0.302 0.015 20.068 0.000 0.302 0.643
## PFB7_r 0.326 0.015 21.135 0.000 0.326 0.652
## PFB8_r 0.065 0.009 7.172 0.000 0.065 0.192
## PFB9_r 0.214 0.014 14.757 0.000 0.214 0.431
## PFB10_r 0.060 0.006 9.283 0.000 0.060 0.227
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## g1 ~~
## g2 0.865 0.037 23.217 0.000 0.865 0.865
##
## Intercepts:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .PFA1_r 0.938 0.012 77.402 0.000 0.938 3.868
## .PFA2_r 0.677 0.023 28.967 0.000 0.677 1.448
## .PFA3_r 0.530 0.025 21.223 0.000 0.530 1.061
## .PFA4_r 0.700 0.023 30.528 0.000 0.700 1.526
## .PFA5_r 0.618 0.024 25.393 0.000 0.618 1.269
## .PFA6_r 0.770 0.021 36.567 0.000 0.770 1.827
## .PFA7_r 0.285 0.023 12.618 0.000 0.285 0.631
## .PFA8_r 0.527 0.025 21.116 0.000 0.527 1.055
## .PFA9_r 0.075 0.013 5.691 0.000 0.075 0.284
## .PFA10_r 0.245 0.022 11.385 0.000 0.245 0.569
## .PFB1_r 0.980 0.007 139.896 0.000 0.980 6.991
## .PFB2_r 0.772 0.021 36.827 0.000 0.772 1.840
## .PFB3_r 0.897 0.015 59.138 0.000 0.897 2.955
## .PFB4_r 0.792 0.020 39.057 0.000 0.792 1.952
## .PFB5_r 0.357 0.024 14.908 0.000 0.357 0.745
## .PFB6_r 0.675 0.023 28.802 0.000 0.675 1.439
## .PFB7_r 0.527 0.025 21.116 0.000 0.527 1.055
## .PFB8_r 0.133 0.017 7.811 0.000 0.133 0.390
## .PFB9_r 0.568 0.025 22.893 0.000 0.568 1.144
## .PFB10_r 0.075 0.013 5.691 0.000 0.075 0.284
## g1 0.000 0.000 0.000
## g2 0.000 0.000 0.000
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .PFA1_r 0.054 0.011 5.114 0.000 0.054 0.926
## .PFA2_r 0.167 0.011 15.857 0.000 0.167 0.762
## .PFA3_r 0.211 0.006 36.338 0.000 0.211 0.845
## .PFA4_r 0.158 0.011 14.084 0.000 0.158 0.750
## .PFA5_r 0.142 0.011 12.972 0.000 0.142 0.600
## .PFA6_r 0.122 0.013 9.443 0.000 0.122 0.689
## .PFA7_r 0.168 0.011 15.640 0.000 0.168 0.823
## .PFA8_r 0.203 0.006 31.895 0.000 0.203 0.813
## .PFA9_r 0.067 0.011 5.983 0.000 0.067 0.965
## .PFA10_r 0.174 0.011 15.459 0.000 0.174 0.938
## .PFB1_r 0.020 0.007 2.919 0.004 0.020 0.999
## .PFB2_r 0.118 0.013 8.922 0.000 0.118 0.668
## .PFB3_r 0.079 0.012 6.476 0.000 0.079 0.861
## .PFB4_r 0.130 0.013 10.153 0.000 0.130 0.787
## .PFB5_r 0.228 0.007 32.947 0.000 0.228 0.992
## .PFB6_r 0.129 0.012 10.534 0.000 0.129 0.586
## .PFB7_r 0.144 0.010 14.187 0.000 0.144 0.575
## .PFB8_r 0.111 0.013 8.860 0.000 0.111 0.963
## .PFB9_r 0.200 0.007 28.465 0.000 0.200 0.814
## .PFB10_r 0.066 0.011 5.873 0.000 0.066 0.948
## g1 1.000 1.000 1.000
## g2 1.000 1.000 1.000
##
##
## Group 2 [1]:
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## g1 =~
## PFA1_r 0.105 0.006 18.851 0.000 0.105 0.349
## PFA2_r 0.274 0.009 31.392 0.000 0.274 0.571
## PFA3_r 0.226 0.009 26.077 0.000 0.226 0.452
## PFA4_r 0.236 0.009 27.351 0.000 0.236 0.484
## PFA5_r 0.310 0.009 34.597 0.000 0.310 0.624
## PFA6_r 0.245 0.008 30.418 0.000 0.245 0.546
## PFA7_r 0.193 0.007 27.927 0.000 0.193 0.445
## PFA8_r 0.243 0.009 28.394 0.000 0.243 0.488
## PFA9_r 0.053 0.004 12.512 0.000 0.053 0.200
## PFA10_r 0.128 0.007 18.769 0.000 0.128 0.305
## g2 =~
## PFB1_r 0.045 0.004 12.093 0.000 0.045 0.232
## PFB2_r 0.247 0.008 30.336 0.000 0.247 0.583
## PFB3_r 0.166 0.007 24.773 0.000 0.166 0.480
## PFB4_r 0.227 0.008 28.561 0.000 0.227 0.544
## PFB5_r 0.109 0.008 14.281 0.000 0.109 0.235
## PFB6_r 0.300 0.009 33.342 0.000 0.300 0.638
## PFB7_r 0.268 0.009 30.675 0.000 0.268 0.536
## PFB8_r 0.084 0.006 14.859 0.000 0.084 0.238
## PFB9_r 0.230 0.009 26.616 0.000 0.230 0.460
## PFB10_r 0.050 0.004 11.897 0.000 0.050 0.189
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## g1 ~~
## g2 0.897 0.022 41.035 0.000 0.897 0.897
##
## Intercepts:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .PFA1_r 0.899 0.010 91.964 0.000 0.899 2.983
## .PFA2_r 0.644 0.016 41.404 0.000 0.644 1.343
## .PFA3_r 0.532 0.016 32.860 0.000 0.532 1.066
## .PFA4_r 0.607 0.016 38.275 0.000 0.607 1.241
## .PFA5_r 0.555 0.016 34.428 0.000 0.555 1.117
## .PFA6_r 0.721 0.015 49.580 0.000 0.721 1.608
## .PFA7_r 0.252 0.014 17.904 0.000 0.252 0.581
## .PFA8_r 0.453 0.016 28.055 0.000 0.453 0.910
## .PFA9_r 0.075 0.009 8.753 0.000 0.075 0.284
## .PFA10_r 0.228 0.014 16.755 0.000 0.228 0.543
## .PFB1_r 0.961 0.006 153.158 0.000 0.961 4.968
## .PFB2_r 0.768 0.014 56.006 0.000 0.768 1.817
## .PFB3_r 0.862 0.011 77.097 0.000 0.862 2.501
## .PFB4_r 0.775 0.014 57.187 0.000 0.775 1.855
## .PFB5_r 0.317 0.015 20.970 0.000 0.317 0.680
## .PFB6_r 0.671 0.015 43.995 0.000 0.671 1.427
## .PFB7_r 0.476 0.016 29.390 0.000 0.476 0.953
## .PFB8_r 0.144 0.011 12.642 0.000 0.144 0.410
## .PFB9_r 0.470 0.016 29.021 0.000 0.470 0.941
## .PFB10_r 0.077 0.009 8.886 0.000 0.077 0.288
## g1 0.000 0.000 0.000
## g2 0.000 0.000 0.000
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .PFA1_r 0.080 0.008 10.116 0.000 0.080 0.879
## .PFA2_r 0.155 0.007 23.712 0.000 0.155 0.674
## .PFA3_r 0.198 0.004 49.055 0.000 0.198 0.796
## .PFA4_r 0.183 0.005 34.480 0.000 0.183 0.766
## .PFA5_r 0.151 0.006 25.833 0.000 0.151 0.611
## .PFA6_r 0.141 0.008 18.701 0.000 0.141 0.702
## .PFA7_r 0.151 0.007 20.252 0.000 0.151 0.802
## .PFA8_r 0.189 0.004 42.750 0.000 0.189 0.762
## .PFA9_r 0.066 0.007 9.133 0.000 0.066 0.960
## .PFA10_r 0.160 0.008 21.022 0.000 0.160 0.907
## .PFB1_r 0.035 0.006 6.111 0.000 0.035 0.946
## .PFB2_r 0.118 0.008 14.091 0.000 0.118 0.660
## .PFB3_r 0.092 0.008 10.894 0.000 0.092 0.770
## .PFB4_r 0.123 0.008 14.841 0.000 0.123 0.704
## .PFB5_r 0.205 0.006 35.368 0.000 0.205 0.945
## .PFB6_r 0.131 0.008 17.480 0.000 0.131 0.593
## .PFB7_r 0.178 0.005 37.599 0.000 0.178 0.713
## .PFB8_r 0.116 0.008 14.257 0.000 0.116 0.943
## .PFB9_r 0.197 0.004 48.067 0.000 0.197 0.788
## .PFB10_r 0.068 0.007 9.338 0.000 0.068 0.964
## g1 1.000 1.000 1.000
## g2 1.000 1.000 1.000
standardizedSolution(DualGFitC)
ZREG(.865, .897, .037, .022)
## [1] -0.7433824
Attempting to move on to testing the invariance of the measurement model and then the structural one, the models would not converge. Based on the lack of widespread metric noninvariance it does not seem likely that the factor covariances (or regressions) would have differed regardless. The amount things differed in the configural model should be the greatest of the subsequent invariance testing models, so it is doubtful that there were changes due to general ability improvement instead of changes in the residual means.
It is hard to do anything with this data because of the choice to use different forms for times 1 and 2. Despite being part of a strategy to reduce practice effects, they have made it impossible to generate strong conclusions because of the resulting indeterminate measurement qualities.
Bates, T. C., & Gignac, G. E. (2022). Effort impacts IQ test scores in a minor way: A multi-study investigation with healthy adult volunteers. Intelligence, 92, 101652. https://doi.org/10.1016/j.intell.2022.101652
Lubinski, D. (2000). Scientific and Social Significance of Assessing Individual Differences: “Sinking Shafts at a Few Critical Points.” Annual Review of Psychology, 51(1), 405–444. https://doi.org/10.1146/annurev.psych.51.1.405
sessionInfo()
## R version 4.1.2 (2021-11-01)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19042)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=English_United States.1252
## [2] LC_CTYPE=English_United States.1252
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] sjmisc_2.8.7 lavaan_0.6-9 psych_2.1.9 pacman_0.5.1
##
## loaded via a namespace (and not attached):
## [1] bslib_0.3.1 compiler_4.1.2 pillar_1.6.4 jquerylib_0.1.4
## [5] tools_4.1.2 digest_0.6.28 tibble_3.1.5 jsonlite_1.7.2
## [9] evaluate_0.14 lifecycle_1.0.1 nlme_3.1-153 lattice_0.20-45
## [13] pkgconfig_2.0.3 rlang_0.4.12 DBI_1.1.2 yaml_2.2.1
## [17] parallel_4.1.2 pbivnorm_0.6.0 xfun_0.27 fastmap_1.1.0
## [21] stringr_1.4.0 dplyr_1.0.7 knitr_1.36 generics_0.1.1
## [25] sass_0.4.0 vctrs_0.3.8 tidyselect_1.1.1 stats4_4.1.2
## [29] sjlabelled_1.1.8 grid_4.1.2 snakecase_0.11.0 glue_1.4.2
## [33] R6_2.5.1 fansi_0.5.0 rmarkdown_2.11 purrr_0.3.4
## [37] magrittr_2.0.1 MASS_7.3-54 ellipsis_0.3.2 htmltools_0.5.2
## [41] assertthat_0.2.1 mnormt_2.0.2 insight_0.17.0 utf8_1.2.2
## [45] stringi_1.7.5 tmvnsim_1.0-2 crayon_1.4.2