R – How to Resolve CFA in Lavaan Not Converging Issues

confirmatory-factorlatent-variablelavaanrstructural-equation-modeling

I am attempting to run a CFA in lavaan but the model will not converge unless std.lv = TRUE. This is causing me concern, and I would like some help understanding some possible reasons why the model won't converge.

Here's a bit more details about the data:

  • I have run a multivariate normality test and confirmed the data is non-normal, and I did not expect it to be as this is Likert scale data on a 5-point scale. However, each observation is the average score of 9 survey respondents, so I believe this means the data is continuous within lower and upper limits (1 and 5).
  • Since it failed the normality test, I am using the MLM estimator and robust standard errors.
  • There are 873 observations, 61 variables, and the CFA has 6 factors.

Below shows the R code. I show where the model fails and then I show the statistics with std.lv = TRUE so you can see the full summary of the model. I would appreciate any points on where there might be things I need to look further into or improve to help the model run better.

    > model4 <-'
+   engage     =~ V1.A.1.a.1 + V1.A.1.a.3 + V1.A.1.a.4 + V2.A.1.b + V2.A.1.d
+                 + V2.B.1.a + V2.B.1.c + V2.B.1.d + V2.B.1.f
+                 + V1.C.5.c + V2.A.1.c + V1.A.1.a.2 + V2.A.1.a + V2.A.2.b
+                 + V1.A.1.e.1 + V1.C.2.b
+   decisive   =~ V1.C.1.a + V1.C.1.b + V1.C.1.c + V1.C.2.b
+                 + V1.C.6 + V1.C.4.b
+   relate     =~ V1.A.1.a.1 + V1.A.1.a.3 + V1.A.1.b.3 + V2.A.1.b + V2.A.1.d
+                 + V2.B.1.a + V2.B.1.f + V2.B.1.b
+                 + V1.C.3.a + V1.C.3.b + V1.C.3.c + V1.C.4.a + V1.C.4.b + V1.C.4.c
+                 + V1.C.5.a + V1.C.5.c + V1.A.1.g.2 + V1.C.2.b
+   manage     =~ V2.A.2.c + V2.A.2.d + V2.B.1.a + V2.B.1.b + V2.B.1.c + V2.B.1.d
+                 + V2.B.1.e + V2.B.4.e + V2.B.4.g + V2.B.4.h + V2.B.5.a + V2.B.5.b
+                 + V2.B.5.c + V2.B.5.d + V2.C.1.a
+                 + V1.C.2.b
+   insight    =~ V1.A.1.b.1 + V1.A.1.b.2 + V2.B.3.a + V2.B.3.b
+                 + V1.C.7.a + V1.C.4.c
+   intuition  =~ V1.A.1.b.3 + V1.A.1.e.1 + V1.A.1.e.2
+                 + V1.A.1.e.3 + V1.A.1.f.2 + V1.A.1.g.1 + V1.A.1.g.2 + V2.A.2.d
+   analysis   =~ V1.A.1.a.1 + V1.A.1.a.2 + V1.A.1.a.4 + V1.A.1.b.3
+                 + V1.A.1.b.4 + V1.A.1.b.5 + V1.A.1.b.6 + V1.A.1.b.7 + V1.A.1.c.1
+                 + V1.A.1.c.2 + V1.A.1.d.1 + V2.A.1.a + V2.A.1.c + V2.A.1.e
+                 + V2.A.2.a + V2.A.2.b + V2.A.2.c + V2.B.2.i + V2.B.4.e
+                 + V2.B.4.g + V2.B.4.h + V1.C.7.b + V2.B.1.e
+ 
+   # Correlated residuals
+   V2.A.1.e ~~ V1.A.1.c.1
+   V2.A.1.e ~~ V1.A.1.c.2
+   V2.B.5.b ~~ V2.B.5.c
+   V1.A.1.a.2 ~~ V2.A.1.a
+   V2.B.4.g ~~ V2.B.4.h
+   V2.A.2.c ~~ V2.B.1.e
+   V2.B.1.c ~~ V2.B.1.d
+   V2.A.1.a ~~ V2.A.1.c
+   V1.A.1.b.4 ~~ V1.A.1.b.5
+   V1.A.1.a.4 ~~ V2.A.1.c
+   V1.A.1.a.2 ~~ V2.A.1.c
+   V1.A.1.a.3 ~~ V1.A.1.a.1
+   V1.A.1.a.4 ~~ V1.A.1.a.2
+   V2.A.1.b ~~ V1.A.1.a.1
+   V2.A.1.b ~~ V1.A.1.a.3
+   V2.A.1.a ~~ V1.A.1.a.4
+   V2.A.1.d ~~ V1.A.1.a.3
+   V2.A.1.d ~~ V2.A.1.b
+   V1.A.1.c.2 ~~ V1.A.1.c.1
+   V2.A.2.a ~~ V1.A.1.b.4
+   V2.A.2.a ~~ V1.A.1.b.5
+   V1.A.1.b.2 ~~ V1.A.1.b.1
+   '
> fitmodel4 <- cfa(model4, data = onet.active, estimator = "MLM", se="robust")
Warning message:
In lavaan::lavaan(model = model4, data = onet.active, estimator = "MLM",  :
  lavaan WARNING:
    the optimizer (NLMINB) claimed the model converged, but not all
    elements of the gradient are (near) zero; the optimizer may not
    have found a local solution use check.gradient = FALSE to skip
    this check.
> fitmodel4 <- cfa(model4, data = onet.active, estimator = "MLM", se="robust", std.lv=TRUE)
> summary(fitmodel4, fit.measures=TRUE)
lavaan 0.6-9 ended normally after 366 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                       197
                                                      
  Number of observations                           873
                                                      
Model Test User Model:
                                               Standard      Robust
  Test Statistic                              12059.219   11161.254
  Degrees of freedom                               1694        1694
  P-value (Chi-square)                            0.000       0.000
  Scaling correction factor                                   1.080
       Satorra-Bentler correction                                  

Model Test Baseline Model:

  Test statistic                             75850.659   72601.538
  Degrees of freedom                              1830        1830
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.045

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.860       0.866
  Tucker-Lewis Index (TLI)                       0.849       0.855
                                                                  
  Robust Comparative Fit Index (CFI)                         0.862
  Robust Tucker-Lewis Index (TLI)                            0.851

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -1182.893   -1182.893
  Loglikelihood unrestricted model (H1)       4846.716    4846.716
                                                                  
  Akaike (AIC)                                2759.786    2759.786
  Bayesian (BIC)                              3699.858    3699.858
  Sample-size adjusted Bayesian (BIC)         3074.232    3074.232

Root Mean Square Error of Approximation:

  RMSEA                                          0.084       0.080
  90 Percent confidence interval - lower         0.082       0.079
  90 Percent confidence interval - upper         0.085       0.081
  P-value RMSEA <= 0.05                          0.000       0.000
                                                                  
  Robust RMSEA                                               0.083
  90 Percent confidence interval - lower                     0.082
  90 Percent confidence interval - upper                     0.085

Standardized Root Mean Square Residual:

  SRMR                                           0.093       0.093

Parameter Estimates:

  Standard errors                           Robust.sem
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  engage =~                                           
    V1.A.1.a.1        0.334    0.014   23.924    0.000
    V1.A.1.a.3        0.413    0.010   39.524    0.000
    V1.A.1.a.4        0.368    0.021   17.519    0.000
    V2.A.1.b          0.417    0.010   41.164    0.000
    V2.A.1.d          0.436    0.010   41.697    0.000
    V2.B.1.a          0.212    0.014   15.400    0.000
    V2.B.1.c          0.280    0.017   16.039    0.000
    V2.B.1.d          0.224    0.018   12.757    0.000
    V2.B.1.f          0.256    0.014   18.464    0.000
    V1.C.5.c          0.232    0.012   19.814    0.000
    V2.A.1.c          0.331    0.021   15.382    0.000
    V1.A.1.a.2        0.296    0.018   15.989    0.000
    V2.A.1.a          0.261    0.017   15.804    0.000
    V2.A.2.b          0.158    0.015   10.300    0.000
    V1.A.1.e.1        0.147    0.008   18.424    0.000
    V1.C.2.b         -0.182    0.017  -10.450    0.000
  decisive =~                                         
    V1.C.1.a          0.347    0.011   32.334    0.000
    V1.C.1.b          0.359    0.010   35.701    0.000
    V1.C.1.c          0.325    0.009   35.644    0.000
    V1.C.2.b          0.197    0.017   11.365    0.000
    V1.C.6            0.200    0.012   16.841    0.000
    V1.C.4.b          0.128    0.014    9.427    0.000
  relate =~                                           
    V1.A.1.a.1        0.042    0.010    4.221    0.000
    V1.A.1.a.3        0.048    0.011    4.368    0.000
    V1.A.1.b.3        0.103    0.008   12.431    0.000
    V2.A.1.b          0.019    0.010    1.853    0.064
    V2.A.1.d          0.030    0.012    2.543    0.011
    V2.B.1.a          0.180    0.011   16.661    0.000
    V2.B.1.f          0.238    0.014   16.833    0.000
    V2.B.1.b          0.074    0.009    8.688    0.000
    V1.C.3.a          0.254    0.009   28.722    0.000
    V1.C.3.b          0.471    0.013   36.169    0.000
    V1.C.3.c          0.483    0.014   35.235    0.000
    V1.C.4.a          0.367    0.009   41.581    0.000
    V1.C.4.b          0.282    0.011   25.105    0.000
    V1.C.4.c          0.249    0.009   27.033    0.000
    V1.C.5.a          0.191    0.008   25.242    0.000
    V1.C.5.c          0.138    0.012   11.831    0.000
    V1.A.1.g.2        0.142    0.009   16.425    0.000
    V1.C.2.b          0.169    0.012   14.275    0.000
  manage =~                                           
    V2.A.2.c          0.170    0.017    9.863    0.000
    V2.A.2.d          0.253    0.010   26.397    0.000
    V2.B.1.a          0.086    0.013    6.501    0.000
    V2.B.1.b          0.290    0.011   27.188    0.000
    V2.B.1.c          0.169    0.019    9.059    0.000
    V2.B.1.d          0.226    0.018   12.642    0.000
    V2.B.1.e          0.263    0.020   13.328    0.000
    V2.B.4.e          0.111    0.010   10.655    0.000
    V2.B.4.g          0.088    0.013    6.594    0.000
    V2.B.4.h          0.114    0.013    8.639    0.000
    V2.B.5.a          0.271    0.010   26.364    0.000
    V2.B.5.b          0.320    0.018   17.601    0.000
    V2.B.5.c          0.276    0.017   16.593    0.000
    V2.B.5.d          0.446    0.014   32.146    0.000
    V2.C.1.a          0.383    0.019   20.377    0.000
    V1.C.2.b          0.334    0.014   23.142    0.000
  insight =~                                          
    V1.A.1.b.1        0.489    0.012   40.962    0.000
    V1.A.1.b.2        0.487    0.012   41.234    0.000
    V2.B.3.a          0.463    0.017   27.016    0.000
    V2.B.3.b          0.236    0.014   16.315    0.000
    V1.C.7.a          0.316    0.014   21.854    0.000
    V1.C.4.c          0.146    0.009   17.110    0.000
  intuition =~                                        
    V1.A.1.b.3        0.162    0.010   15.559    0.000
    V1.A.1.e.1        0.265    0.011   25.234    0.000
    V1.A.1.e.2        0.333    0.011   29.485    0.000
    V1.A.1.e.3        0.325    0.013   25.409    0.000
    V1.A.1.f.2        0.280    0.016   18.006    0.000
    V1.A.1.g.1        0.151    0.011   13.742    0.000
    V1.A.1.g.2        0.172    0.011   15.207    0.000
    V2.A.2.d          0.088    0.011    8.004    0.000
  analysis =~                                         
    V1.A.1.a.1        0.030    0.011    2.691    0.007
    V1.A.1.a.2        0.244    0.019   12.839    0.000
    V1.A.1.a.4        0.225    0.022   10.225    0.000
    V1.A.1.b.3        0.209    0.010   20.933    0.000
    V1.A.1.b.4        0.409    0.007   55.611    0.000
    V1.A.1.b.5        0.444    0.008   54.941    0.000
    V1.A.1.b.6        0.262    0.009   30.217    0.000
    V1.A.1.b.7        0.247    0.010   23.974    0.000
    V1.A.1.c.1        0.417    0.017   24.190    0.000
    V1.A.1.c.2        0.336    0.015   22.152    0.000
    V1.A.1.d.1        0.260    0.009   29.587    0.000
    V2.A.1.a          0.265    0.017   15.710    0.000
    V2.A.1.c          0.264    0.023   11.509    0.000
    V2.A.1.e          0.375    0.018   21.428    0.000
    V2.A.2.a          0.421    0.008   53.015    0.000
    V2.A.2.b          0.330    0.017   19.737    0.000
    V2.A.2.c          0.313    0.017   18.448    0.000
    V2.B.2.i          0.452    0.011   42.102    0.000
    V2.B.4.e          0.310    0.012   25.677    0.000
    V2.B.4.g          0.446    0.014   30.878    0.000
    V2.B.4.h          0.419    0.014   29.566    0.000
    V1.C.7.b          0.461    0.014   33.123    0.000
    V2.B.1.e          0.215    0.018   11.867    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
 .V1.A.1.c.1 ~~                                       
   .V2.A.1.e          0.180    0.011   16.812    0.000
 .V1.A.1.c.2 ~~                                       
   .V2.A.1.e          0.160    0.009   16.859    0.000
 .V2.B.5.b ~~                                         
   .V2.B.5.c          0.100    0.006   15.777    0.000
 .V1.A.1.a.2 ~~                                       
   .V2.A.1.a          0.043    0.004    9.964    0.000
 .V2.B.4.g ~~                                         
   .V2.B.4.h          0.043    0.003   16.062    0.000
 .V2.A.2.c ~~                                         
   .V2.B.1.e          0.096    0.008   11.694    0.000
 .V2.B.1.c ~~                                         
   .V2.B.1.d          0.047    0.004   10.798    0.000
 .V2.A.1.c ~~                                         
   .V2.A.1.a          0.031    0.004    8.082    0.000
 .V1.A.1.b.4 ~~                                       
   .V1.A.1.b.5        0.019    0.001   13.788    0.000
 .V1.A.1.a.4 ~~                                       
   .V2.A.1.c          0.049    0.004   11.212    0.000
 .V2.A.1.c ~~                                         
   .V1.A.1.a.2        0.032    0.004    7.824    0.000
 .V1.A.1.a.1 ~~                                       
   .V1.A.1.a.3        0.017    0.001   11.245    0.000
 .V1.A.1.a.4 ~~                                       
   .V1.A.1.a.2        0.039    0.004    9.535    0.000
 .V1.A.1.a.1 ~~                                       
   .V2.A.1.b          0.011    0.002    6.502    0.000
 .V1.A.1.a.3 ~~                                       
   .V2.A.1.b          0.007    0.002    4.275    0.000
 .V1.A.1.a.4 ~~                                       
   .V2.A.1.a          0.034    0.004    9.094    0.000
 .V1.A.1.a.3 ~~                                       
   .V2.A.1.d          0.011    0.002    6.475    0.000
 .V2.A.1.b ~~                                         
   .V2.A.1.d          0.003    0.001    1.886    0.059
 .V1.A.1.c.1 ~~                                       
   .V1.A.1.c.2        0.162    0.010   16.766    0.000
 .V1.A.1.b.4 ~~                                       
   .V2.A.2.a          0.010    0.001    8.206    0.000
 .V1.A.1.b.5 ~~                                       
   .V2.A.2.a          0.010    0.001    7.880    0.000
 .V1.A.1.b.1 ~~                                       
   .V1.A.1.b.2        0.031    0.004    7.905    0.000
  engage ~~                                           
    decisive          0.665    0.020   33.429    0.000
    relate            0.442    0.033   13.453    0.000
    manage            0.693    0.018   38.167    0.000
    insight           0.715    0.019   37.534    0.000
    intuition         0.075    0.039    1.939    0.052
    analysis          0.796    0.016   48.750    0.000
  decisive ~~                                         
    relate            0.419    0.033   12.498    0.000
    manage            0.572    0.023   24.807    0.000
    insight           0.723    0.019   38.969    0.000
    intuition         0.093    0.042    2.239    0.025
    analysis          0.681    0.020   33.576    0.000
  relate ~~                                           
    manage            0.398    0.028   14.351    0.000
    insight           0.113    0.039    2.912    0.004
    intuition        -0.062    0.035   -1.769    0.077
    analysis          0.148    0.037    3.990    0.000
  manage ~~                                           
    insight           0.706    0.020   34.673    0.000
    intuition         0.300    0.032    9.262    0.000
    analysis          0.725    0.016   44.293    0.000
  insight ~~                                          
    intuition         0.331    0.034    9.659    0.000
    analysis          0.867    0.014   64.139    0.000
  intuition ~~                                        
    analysis          0.488    0.030   16.266    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .V1.A.1.a.1        0.032    0.002   15.093    0.000
   .V1.A.1.a.3        0.031    0.002   14.565    0.000
   .V1.A.1.a.4        0.066    0.004   15.018    0.000
   .V2.A.1.b          0.023    0.002   10.771    0.000
   .V2.A.1.d          0.027    0.002   11.825    0.000
   .V2.B.1.a          0.050    0.003   18.763    0.000
   .V2.B.1.c          0.065    0.005   12.182    0.000
   .V2.B.1.d          0.073    0.006   11.647    0.000
   .V2.B.1.f          0.091    0.005   17.876    0.000
   .V1.C.5.c          0.075    0.005   15.635    0.000
   .V2.A.1.c          0.069    0.005   12.721    0.000
   .V1.A.1.a.2        0.062    0.005   12.837    0.000
   .V2.A.1.a          0.051    0.004   12.036    0.000
   .V2.A.2.b          0.043    0.002   19.813    0.000
   .V1.A.1.e.1        0.038    0.002   17.041    0.000
   .V1.C.2.b          0.060    0.004   14.764    0.000
   .V1.C.1.a          0.031    0.002   13.799    0.000
   .V1.C.1.b          0.022    0.002   12.198    0.000
   .V1.C.1.c          0.022    0.001   15.205    0.000
   .V1.C.6            0.087    0.004   21.463    0.000
   .V1.C.4.b          0.058    0.005   12.601    0.000
   .V1.A.1.b.3        0.045    0.003   16.994    0.000
   .V2.B.1.b          0.035    0.002   18.132    0.000
   .V1.C.3.a          0.039    0.002   16.077    0.000
   .V1.C.3.b          0.068    0.004   16.604    0.000
   .V1.C.3.c          0.076    0.005   15.998    0.000
   .V1.C.4.a          0.035    0.002   15.566    0.000
   .V1.C.4.c          0.042    0.002   16.895    0.000
   .V1.C.5.a          0.039    0.003   15.408    0.000
   .V1.A.1.g.2        0.061    0.003   21.130    0.000
   .V2.A.2.c          0.115    0.008   14.761    0.000
   .V2.A.2.d          0.057    0.003   20.162    0.000
   .V2.B.1.e          0.133    0.010   13.728    0.000
   .V2.B.4.e          0.030    0.002   18.543    0.000
   .V2.B.4.g          0.061    0.003   19.224    0.000
   .V2.B.4.h          0.056    0.003   18.973    0.000
   .V2.B.5.a          0.037    0.002   15.770    0.000
   .V2.B.5.b          0.134    0.009   15.487    0.000
   .V2.B.5.c          0.118    0.007   18.046    0.000
   .V2.B.5.d          0.048    0.003   15.130    0.000
   .V2.C.1.a          0.186    0.009   20.059    0.000
   .V1.A.1.b.1        0.042    0.004   10.720    0.000
   .V1.A.1.b.2        0.053    0.005   11.184    0.000
   .V2.B.3.a          0.184    0.010   17.936    0.000
   .V2.B.3.b          0.103    0.007   15.287    0.000
   .V1.C.7.a          0.123    0.007   18.889    0.000
   .V1.A.1.e.2        0.034    0.003   13.394    0.000
   .V1.A.1.e.3        0.045    0.003   14.384    0.000
   .V1.A.1.f.2        0.169    0.009   18.070    0.000
   .V1.A.1.g.1        0.033    0.002   13.505    0.000
   .V1.A.1.b.4        0.027    0.001   18.219    0.000
   .V1.A.1.b.5        0.034    0.002   18.610    0.000
   .V1.A.1.b.6        0.044    0.003   17.361    0.000
   .V1.A.1.b.7        0.043    0.003   16.667    0.000
   .V1.A.1.c.1        0.193    0.011   17.502    0.000
   .V1.A.1.c.2        0.166    0.009   17.823    0.000
   .V1.A.1.d.1        0.060    0.005   13.001    0.000
   .V2.A.1.e          0.200    0.011   17.946    0.000
   .V2.A.2.a          0.025    0.002   16.444    0.000
   .V2.B.2.i          0.030    0.002   17.940    0.000
   .V1.C.7.b          0.105    0.006   18.439    0.000
    engage            1.000                           
    decisive          1.000                           
    relate            1.000                           
    manage            1.000                           
    insight           1.000                           
    intuition         1.000                           
    analysis          1.000                           
```

Best Answer

Just to add a few things to @Preston Botter's answer above, none of your fit indices show that your model shows even an adequate fit. For the comparative fit indices CFI and TLI, you need at least >.900. For the absolute fit indices RMSEA and SRMR, you should have <.080.

Your process of modelling can be greatly improved if you assess the individual CFA fit of each model first, and also check for the magnitude of factor loadings (every standardised factor loading should be at least > |.30|, meaning that each item explains at least about 10% of the variance in its latent factor). After modelling each factor individually, you will most likely identify the culprit that pushes your 6-factor model fit down. I've noticed that in your 6-factor model some standardised factor loadings are low.

Remember you always want to follow a three-step process: 1) Assess the CFA fit of each individual model; 2) Measurement model (all factors correlated); 3) Structural Model (where you specify the exact relationships among the factors tested in Step 2).

Also, you can use DWLS (it was developed to assess parameters for the Likert scale type items), but you can also try a Robust variant of the Maximum Likelihood ("MLR") - this estimator is robust against non-extreme deviations from normality. From experience, on an odd occasion, you might get a better fit with it than DWLS. However, DWLS should be your preferred choice.