4
$\begingroup$

I'm interested in learning about the Diagonally Weighted Least Squares (DWLS) method for confirmatory factor analysis (CFA). I'm using lavaan package in R.

I found a couple of papers on DWLS such as

These papers mention that DWLS may be used in cases where the normality assumptions of the data are not met and/or the data is ordinal. In the toy data that I'm using, the data is not ordinal but may not meet the normality assumptions either.

When I used modeled the data, I get the following results for ML method:

lavaan 0.6-5 ended normally after 58 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                        127
                                                      
                                                  Used       Total
  Number of observations                           168         273
                                                                  
Model Test User Model:
                                                      
  Test statistic                               890.927
  Degrees of freedom                               539
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4180.744
  Degrees of freedom                               630
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.901
  Tucker-Lewis Index (TLI)                       0.884

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -6918.778
  Loglikelihood unrestricted model (H1)      -6473.314
                                                      
  Akaike (AIC)                               14091.556
  Bayesian (BIC)                             14488.299
  Sample-size adjusted Bayesian (BIC)        14086.190

Root Mean Square Error of Approximation:

  RMSEA                                          0.062
  90 Percent confidence interval - lower         0.055
  90 Percent confidence interval - upper         0.070
  P-value RMSEA <= 0.05                          0.003

Standardized Root Mean Square Residual:

  SRMR                                           0.057

And using ML with Robust method

lavaan 0.6-5 ended normally after 58 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                        127
                                                      
                                                  Used       Total
  Number of observations                           168         273
                                                                  
Model Test User Model:
                                              Standard      Robust
  Test Statistic                               890.927     841.272
  Degrees of freedom                               539         539
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.059
    for the Yuan-Bentler correction (Mplus variant) 

Model Test Baseline Model:

  Test statistic                              4180.744    3891.337
  Degrees of freedom                               630         630
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.074

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.901       0.907
  Tucker-Lewis Index (TLI)                       0.884       0.892
                                                                  
  Robust Comparative Fit Index (CFI)                         0.909
  Robust Tucker-Lewis Index (TLI)                            0.893

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -6918.778   -6918.778
  Scaling correction factor                                  1.039
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -6473.314   -6473.314
  Scaling correction factor                                  1.055
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               14091.556   14091.556
  Bayesian (BIC)                             14488.299   14488.299
  Sample-size adjusted Bayesian (BIC)        14086.190   14086.190

Root Mean Square Error of Approximation:

  RMSEA                                          0.062       0.058
  90 Percent confidence interval - lower         0.055       0.050
  90 Percent confidence interval - upper         0.070       0.065
  P-value RMSEA <= 0.05                          0.003       0.043
                                                                  
  Robust RMSEA                                               0.059
  90 Percent confidence interval - lower                     0.052
  90 Percent confidence interval - upper                     0.067

Standardized Root Mean Square Residual:

  SRMR                                           0.057       0.057

Although I used cfa(model, data = data, estimator = "MLR", std.lv = TRUE, std.ov = TRUE, test = "Satorra-Bentler") for robust method, the result shows the the Yuan-Bentler correction. Why?

And finally, the DWLS method:

lavaan 0.6-5 ended normally after 75 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of free parameters                        127
                                                      
                                                  Used       Total
  Number of observations                           168         273
                                                                  
Model Test User Model:
                                                      
  Test statistic                               298.082
  Degrees of freedom                               539
  P-value (Chi-square)                           1.000

Model Test Baseline Model:

  Test statistic                             19920.394
  Degrees of freedom                               630
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000
  Tucker-Lewis Index (TLI)                       1.015

Root Mean Square Error of Approximation:

  RMSEA                                          0.000
  90 Percent confidence interval - lower         0.000
  90 Percent confidence interval - upper         0.000
  P-value RMSEA <= 0.05                          1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.053

So, my questions are:

  1. Why Robust method doesn't show Satorra-Bentler method even though I used it in the function. Am I misunderstanding the lavaan package for the robust method?

  2. If the data is not normally distributed, is it okay to use DWLS method?

  3. Why are the CFI/TLI is 1 and RMSEA is 0. Is this reportable?

I'm very new to cfa, and I'm attempting to learn this using lavaan package and some papers. I hope somebody can point me in the right direction to learn more about CFA and DWLS method.

$\endgroup$

1 Answer 1

4
$\begingroup$
  1. The robust method doesn't show Satorra-Bentler because, by default, when you specify estimator = 'MLR', the Yuan-Bentler test statistic is used. This is why that's appearing in your results. Although this default option seems obtuse, the source for this answer can be found here: https://lavaan.ugent.be/tutorial/est.html

  2. From my understanding, yes, you can use DWLS when data is not normally distributed. I say from my understanding because sometimes the CFA literature regarding when to use estimators is sometimes unclear. That said, usually DWLS and ULS estimators are used when performing a CFA with ordinal data and a small sample size (as is your case, n = 168). If you're working with ordinal data, jump right on it. If you're working with continuous data, I'd suggest estimator = 'MLM' in lavaan - an estimator that produces robust estimates and tries to correct for data non-normality.

  3. CFI and TLI are can fall below 0 and above 1. So yes, this values can sometimes even surpass 1. Generally, if it surpasses 1 or is 1, you report CFI/TLI = 1.000 - no need to specify what comes after the "dot". As for the RMSEA, it's quite excellent. You should worry if in the results RMSEA = NA, which can indicate that the RMSEA statistic could not be calculated due to lack of degrees of freedom. So, in overall, your results are reportable.

$\endgroup$
3
  • $\begingroup$ @GabrialReis, Great explanation. As for your second point, I'm using DWLS on likert type items. The value range from 1-5. However, it's in the literature that people mostly treat this as continuous. They are not treated as ordinal at all, but I'll leave that to experts to discuss whether it should or shouldn't. Since, in my case the data is continuous, should I then use MLM instead of DWLS? Since I've already reported this, should I redo this using MLM and report the new one instead? I guess I'm asking if it causes problems with my data to analyze it using DWLS. $\endgroup$ Commented Jan 13, 2021 at 15:50
  • 1
    $\begingroup$ Hi! Likert type items are generally treated using DWLS, ULS and WLS estimators (especially WLSMV and WLSM). If you're using Likert type items, DWLS, ULS and WLS will correct this "non-continuity" problem and treat'em ordinally. What is not clear in the literature, at least to me, is which of these (DWLS, ULS, WLS) is theoretically preferable. Relevant sources to this are found here, here, here and here. $\endgroup$ Commented Jan 13, 2021 at 18:01
  • $\begingroup$ Thank you so much for the information. This is really helpful. $\endgroup$ Commented Jan 13, 2021 at 20:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.