P.S.: I ask this because fitting the WLSMV-estimated CFA with the different methods yields relatively similar parameter estimates (e.g., factor loadings and variances), but the fit indices, especially the Robust CFI/TLI/RMSEA, differ considerably.
Fitting a two-factor model with lavaan.mi()
# lavaan model for two first-order factor
cfa2 <- '
pos =~ NA*SCS_SF_q2 + SCS_SF_q6 + SCS_SF_q5 + SCS_SF_q10 + SCS_SF_q3 + SCS_SF_q7
neg =~ NA*SCS_SF_q11rev + SCS_SF_q12rev + SCS_SF_q4rev + SCS_SF_q8rev + SCS_SF_q1rev + SCS_SF_q9rev
pos ~~ 1*pos
neg ~~ 1*neg'
cfa2out <- cfa.mi(cfa2, data=imp2final, ordered=c("SCS_SF_q1rev", "SCS_SF_q2", "SCS_SF_q3", "SCS_SF_q4rev", "SCS_SF_q5", "SCS_SF_q6",
"SCS_SF_q7", "SCS_SF_q8rev", "SCS_SF_q9rev", "SCS_SF_q10", "SCS_SF_q11rev", "SCS_SF_q12rev"), estimator = "WLSMV")
summary(cfa2out, standardized = TRUE, rsquare=TRUE, fit.measures=TRUE, test = "D2")
lavaan.mi object fit to 20 imputed data sets using:
- lavaan (0.6-19)
- lavaan.mi (0.1-0)
See class?lavaan.mi help page for available methods.
Convergence information:
The model converged on 20 imputed data sets.
Standard errors were available for all imputations.
Estimator DWLS
Optimization method NLMINB
Number of model parameters 61
Number of observations 170
Model Test User Model:
Standard Scaled
Test statistic 103.339 123.851
Degrees of freedom 53 53
P-value 0.000 0.000
Average scaling correction factor 0.984
Average shift parameter 18.806
simple second-order correction
Pooling method D2
Pooled statistic “standard”
“scaled.shifted” correction applied AFTER pooling
Model Test Baseline Model:
Test statistic 757.618 406.820
Degrees of freedom 66 66
P-value 0.000 0.000
Scaling correction factor 2.029
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.927 0.792
Tucker-Lewis Index (TLI) 0.909 0.741
Robust Comparative Fit Index (CFI) 0.854
Robust Tucker-Lewis Index (TLI) 0.818
Root Mean Square Error of Approximation:
RMSEA 0.075 0.089
90 Percent confidence interval - lower 0.053 0.069
90 Percent confidence interval - upper 0.096 0.109
P-value H_0: RMSEA <= 0.050 0.031 0.001
P-value H_0: RMSEA >= 0.080 0.367 0.777
Robust RMSEA 0.111
90 Percent confidence interval - lower 0.092
90 Percent confidence interval - upper 0.130
P-value H_0: Robust RMSEA <= 0.050 0.000
P-value H_0: Robust RMSEA >= 0.080 0.996
Standardized Root Mean Square Residual:
SRMR 0.095 0.095
Fitting with poolSat() method:
## fit saturated model to imputations, pool those results
columns_to_subset <- c("SCS_SF_q1rev", "SCS_SF_q2", "SCS_SF_q3", "SCS_SF_q4rev", "SCS_SF_q5", "SCS_SF_q6",
"SCS_SF_q7", "SCS_SF_q8rev", "SCS_SF_q9rev", "SCS_SF_q10", "SCS_SF_q11rev", "SCS_SF_q12rev")
impSubset1 <- lapply(complete(imp2final, "all"), function(df) df[, columns_to_subset])
prePooledData <- poolSat(impSubset1, ordered = TRUE)
# lavaan model for two first-order factor
cfa2.pooled <- '
pos =~ NA*SCS_SF_q2 + SCS_SF_q6 + SCS_SF_q5 + SCS_SF_q10 + SCS_SF_q3 + SCS_SF_q7
neg =~ NA*SCS_SF_q11rev + SCS_SF_q12rev + SCS_SF_q4rev + SCS_SF_q8rev + SCS_SF_q1rev + SCS_SF_q9rev
pos ~~ 1*pos
neg ~~ 1*neg'
cfa2.pooled.out <- cfa(cfa2.pooled, data=prePooledData, estimator = "WLSMV")
summary(cfa2.pooled.out, rsquare=TRUE, fit.measures=TRUE)
lavaan 0.6-19 ended normally after 28 iterations
Estimator DWLS
Optimization method NLMINB
Number of model parameters 61
Number of observations 170
Model Test User Model:
Standard Scaled
Test Statistic 91.157 113.371
Degrees of freedom 53 53
P-value (Chi-square) 0.001 0.000
Scaling correction factor 0.952
Shift parameter 17.659
simple second-order correction
Model Test Baseline Model:
Test statistic 1419.303 742.264
Degrees of freedom 66 66
P-value 0.000 0.000
Scaling correction factor 2.001
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.972 0.911
Tucker-Lewis Index (TLI) 0.965 0.889
Robust Comparative Fit Index (CFI) 0.187
Robust Tucker-Lewis Index (TLI) -0.013
Root Mean Square Error of Approximation:
RMSEA 0.065 0.082
90 Percent confidence interval - lower 0.042 0.061
90 Percent confidence interval - upper 0.088 0.103
P-value H_0: RMSEA <= 0.050 0.132 0.008
P-value H_0: RMSEA >= 0.080 0.146 0.585
Robust RMSEA 0.255
90 Percent confidence interval - lower 0.227
90 Percent confidence interval - upper 0.284
P-value H_0: Robust RMSEA <= 0.050 0.000
P-value H_0: Robust RMSEA >= 0.080 1.000
Standardized Root Mean Square Residual:
SRMR 0.091 0.091