Inspecting specific imputed datasets in cfa.mi() for Heywood cases

124 views
Skip to first unread message

Bryan Stiles

unread,
Mar 25, 2025, 9:27:12 PM3/25/25
to lavaan
Hello lavaan community, I am fitting a higher-order CFA model (output below) using cfa.mi() on 20 imputed datasets. I received a warning that some of the estimated lv variances were negative and that Heywood cases were detected in six of the imputed datasets, although it doesn't appear to be the case in the pooled estimates. 

I would like to inspect these six specific datasets to investigate the nature of the Heywood case, but I'm unsure how to access them. I couldn't find much of a response to this specific question in the forum. Is there a workaround to pull this data? 

Thank you!

> summary(cfa4out, 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.
Heywood cases detected for data set(s) 1, 6, 9, 13, 14, 15
These are not necessarily a cause for concern, unless a pooled estimate is also a Heywood case.



  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                        60

  Number of observations                           170

Model Test User Model:

                                                Standard      Scaled
  Test statistic                                 185.011     189.161
  Degrees of freedom                                  54          54
  P-value                                          0.000       0.000
  Average scaling correction factor                            1.092
  Average shift parameter                                     19.694
    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.811       0.603
  Tucker-Lewis Index (TLI)                       0.768       0.515
                                                                 
  Robust Comparative Fit Index (CFI)                         0.723
  Robust Tucker-Lewis Index (TLI)                            0.662

Root Mean Square Error of Approximation:

  RMSEA                                          0.120       0.122
  90 Percent confidence interval - lower         0.101       0.103
  90 Percent confidence interval - upper         0.139       0.141
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    1.000       1.000
                                                                 
  Robust RMSEA                                               0.151
  90 Percent confidence interval - lower                     0.133
  90 Percent confidence interval - upper                     0.169
  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.152       0.152

Parameter Estimates:

  Parameterization                               Delta
  Standard errors                                  Robust.sem
  Information                                        Expected
  Information saturated (h1) model               Unstructured
                                                             
  Pooled across imputations              Rubin's (1987) rules
  Augment within-imputation variance     Scale by average RIV
  Wald test for pooled parameters          t(df) distribution

  Pooled t statistics with df >= 1000 are displayed with
  df = Inf(inity) to save space. Although the t distribution
  with large df closely approximates a standard normal
  distribution, exact df for reporting these t tests can be
  obtained from parameterEstimates.mi()


Latent Variables:
                   Estimate  Std.Err  t-value       df  P(>|t|)   Std.lv  Std.all
  sk =~                                                                          
    SCS_SF_q2  (a)    1.000                                        0.588    0.588
    SCS_SF_q6  (a)    1.000                                        0.588    0.588
  sj =~                                                                          
    SCS_SF_q11 (b)    1.000                                        0.819    0.819
    SCS_SF_q12 (b)    1.000                                        0.819    0.819
  ch =~                                                                          
    SCS_SF_q5  (c)    1.000                                        0.563    0.563
    SCS_SF_q10 (c)    1.000                                        0.563    0.563
  is =~                                                                          
    SCS_SF_q4r (d)    1.000                                        0.751    0.751
    SCS_SF_q8r (d)    1.000                                        0.751    0.751
  mi =~                                                                          
    SCS_SF_q3  (e)    1.000                                        0.736    0.736
    SCS_SF_q7  (e)    1.000                                        0.736    0.736
  oi =~                                                                          
    SCS_SF_q1r (f)    1.000                                        0.696    0.696
    SCS_SF_q9r (f)    1.000                                        0.696    0.696
  sc =~                                                                          
    sk                0.388    0.065    5.974  809.520    0.000    0.660    0.660
    sj                0.695    0.044   15.732  390.734    0.000    0.849    0.849
    ch                0.240    0.062    3.866      Inf    0.000    0.427    0.427
    is                0.714    0.040   17.905  650.033    0.000    0.951    0.951
    mi                0.327    0.064    5.127  279.663    0.000    0.445    0.445
    oi                0.683    0.045   15.345  937.094    0.000    0.981    0.981

Thresholds:
                   Estimate  Std.Err  t-value       df  P(>|t|)   Std.lv  Std.all
    SCS_SF_q2|t1     -1.367    0.154   -8.871  866.684    0.000   -1.367   -1.367
    SCS_SF_q2|t2     -0.743    0.119   -6.219      Inf    0.000   -0.743   -0.743
    SCS_SF_q2|t3      0.250    0.109    2.287      Inf    0.022    0.250    0.250
    SCS_SF_q2|t4      1.273    0.147    8.680      Inf    0.000    1.273    1.273
    SCS_SF_q6|t1     -1.109    0.136   -8.160      Inf    0.000   -1.109   -1.109
    SCS_SF_q6|t2     -0.075    0.108   -0.690      Inf    0.490   -0.075   -0.075
    SCS_SF_q6|t3      0.527    0.114    4.643      Inf    0.000    0.527    0.527
    SCS_SF_q6|t4      1.253    0.145    8.630      Inf    0.000    1.253    1.253
    SCS_SF_q11rv|1   -0.755    0.120   -6.297      Inf    0.000   -0.755   -0.755
    SCS_SF_q11rv|2   -0.035    0.108   -0.321      Inf    0.748   -0.035   -0.035
    SCS_SF_q11rv|3    0.674    0.117    5.744      Inf    0.000    0.674    0.674
    SCS_SF_q11rv|4    1.297    0.148    8.734      Inf    0.000    1.297    1.297
    SCS_SF_q12rv|1   -1.202    0.142   -8.479  787.658    0.000   -1.202   -1.202
    SCS_SF_q12rv|2   -0.360    0.111   -3.260      Inf    0.001   -0.360   -0.360
    SCS_SF_q12rv|3    0.463    0.112    4.125      Inf    0.000    0.463    0.463
    SCS_SF_q12rv|4    1.323    0.150    8.791      Inf    0.000    1.323    1.323
    SCS_SF_q5|t1     -1.205    0.142   -8.489      Inf    0.000   -1.205   -1.205
    SCS_SF_q5|t2     -0.406    0.111   -3.653      Inf    0.000   -0.406   -0.406
    SCS_SF_q5|t3      0.294    0.110    2.682      Inf    0.007    0.294    0.294
    SCS_SF_q5|t4      1.096    0.135    8.107      Inf    0.000    1.096    1.096
    SCS_SF_q10|t1    -1.146    0.138   -8.294  857.868    0.000   -1.146   -1.146
    SCS_SF_q10|t2    -0.401    0.111   -3.605      Inf    0.000   -0.401   -0.401
    SCS_SF_q10|t3     0.440    0.112    3.936      Inf    0.000    0.440    0.440
    SCS_SF_q10|t4     1.305    0.149    8.755      Inf    0.000    1.305    1.305
    SCS_SF_q4rv|t1   -0.855    0.124   -6.918      Inf    0.000   -0.855   -0.855
    SCS_SF_q4rv|t2    0.118    0.108    1.087  874.286    0.278    0.118    0.118
    SCS_SF_q4rv|t3    0.833    0.123    6.786      Inf    0.000    0.833    0.833
    SCS_SF_q4rv|t4    1.456    0.162    8.989  997.836    0.000    1.456    1.456
    SCS_SF_q8rv|t1   -0.740    0.119   -6.200      Inf    0.000   -0.740   -0.740
    SCS_SF_q8rv|t2    0.188    0.109    1.735      Inf    0.083    0.188    0.188
    SCS_SF_q8rv|t3    0.748    0.120    6.252      Inf    0.000    0.748    0.748
    SCS_SF_q8rv|t4    1.137    0.138    8.257  450.838    0.000    1.137    1.137
    SCS_SF_q3|t1     -1.373    0.155   -8.878  637.285    0.000   -1.373   -1.373
    SCS_SF_q3|t2     -0.780    0.121   -6.458  418.631    0.000   -0.780   -0.780
    SCS_SF_q3|t3     -0.110    0.108   -1.018  917.748    0.309   -0.110   -0.110
    SCS_SF_q3|t4      1.009    0.130    7.730      Inf    0.000    1.009    1.009
    SCS_SF_q7|t1     -1.508    0.167   -9.019  575.832    0.000   -1.508   -1.508
    SCS_SF_q7|t2     -1.095    0.135   -8.102      Inf    0.000   -1.095   -1.095
    SCS_SF_q7|t3     -0.078    0.108   -0.718      Inf    0.473   -0.078   -0.078
    SCS_SF_q7|t4      0.775    0.121    6.425  941.048    0.000    0.775    0.775
    SCS_SF_q1rv|t1   -0.814    0.122   -6.673      Inf    0.000   -0.814   -0.814
    SCS_SF_q1rv|t2    0.038    0.108    0.349      Inf    0.727    0.038    0.038
    SCS_SF_q1rv|t3    0.629    0.116    5.421      Inf    0.000    0.629    0.629
    SCS_SF_q1rv|t4    1.334    0.151    8.821      Inf    0.000    1.334    1.334
    SCS_SF_q9rv|t1   -0.618    0.116   -5.336      Inf    0.000   -0.618   -0.618
    SCS_SF_q9rv|t2    0.097    0.108    0.895      Inf    0.371    0.097    0.097
    SCS_SF_q9rv|t3    0.697    0.118    5.908      Inf    0.000    0.697    0.697
    SCS_SF_q9rv|t4    1.248    0.145    8.616      Inf    0.000    1.248    1.248

Variances:
                   Estimate  Std.Err  t-value       df  P(>|t|)   Std.lv  Std.all
    sc                1.000                                        1.000    1.000
   .SCS_SF_q2         0.654                                        0.654    0.654
   .SCS_SF_q6         0.654                                        0.654    0.654
   .SCS_SF_q11rev     0.329                                        0.329    0.329
   .SCS_SF_q12rev     0.329                                        0.329    0.329
   .SCS_SF_q5         0.683                                        0.683    0.683
   .SCS_SF_q10        0.683                                        0.683    0.683
   .SCS_SF_q4rev      0.436                                        0.436    0.436
   .SCS_SF_q8rev      0.436                                        0.436    0.436
   .SCS_SF_q3         0.457                                        0.457    0.457
   .SCS_SF_q7         0.457                                        0.457    0.457
   .SCS_SF_q1rev      0.515                                        0.515    0.515
   .SCS_SF_q9rev      0.515                                        0.515    0.515
   .sk                0.195    0.079    2.466  265.155    0.014    0.564    0.564
   .sj                0.188    0.055    3.417  183.501    0.001    0.280    0.280
   .ch                0.259    0.070    3.687  130.944    0.000    0.818    0.818
   .is                0.054    0.047    1.141   87.529    0.257    0.096    0.096
   .mi                0.435    0.066    6.586  228.110    0.000    0.802    0.802
   .oi                0.018    0.059    0.301  198.335    0.764    0.037    0.037

R-Square:
                   Estimate
    SCS_SF_q2         0.346
    SCS_SF_q6         0.346
    SCS_SF_q11rev     0.671
    SCS_SF_q12rev     0.671
    SCS_SF_q5         0.317
    SCS_SF_q10        0.317
    SCS_SF_q4rev      0.564
    SCS_SF_q8rev      0.564
    SCS_SF_q3         0.543
    SCS_SF_q7         0.543
    SCS_SF_q1rev      0.485
    SCS_SF_q9rev      0.485
    sk                0.436
    sj                0.720
    ch                0.182
    is                0.904
    mi                0.198
    oi                0.963

Warning messages:
1: lavaan->lav_object_post_check():  
   some estimated lv variances are negative
2: lavaan->lav_object_post_check():  
   some estimated lv variances are negative
3: lavaan->lav_object_post_check():  
   some estimated lv variances are negative
4: lavaan->lav_object_post_check():  
   some estimated lv variances are negative
5: lavaan->lav_object_post_check():  
   some estimated lv variances are negative
6: lavaan->lav_object_post_check():  
   some estimated lv variances are negative 

Terrence Jorgensen

unread,
Apr 1, 2025, 4:23:09 AM4/1/25
to lavaan

Heywood cases were detected in six of the imputed datasets, although it doesn't appear to be the case in the pooled estimates. 

The pooled estimates are what you draw inferences from, so that's all I would be concerned with.  But there are very smart people who disagree with me on that, including (if I recall correctly) my coauthors Craig Enders and Max Mansolf.

I would like to inspect these six specific datasets to investigate the nature of the Heywood case, but I'm unsure how to access them. 

The message is telling you which imputations to inspect:

Heywood cases detected for data set(s) 1, 6, 9, 13, 14, 15

If you fit you model to a list of imputed data sets (rather than a mids object), then you can extract them like any list item.

dataList[[1]]
dataList[[6]]

And fit models to them using cfa()

Also read about the omit.imps= argument on the class?lavaan.mi help page (and most other help pages in the lavaan.mi package), if you wanted to see results pooled from imputations without Heywood cases:
 
summary(cfa4out, standardized = TRUE, rsquare=TRUE, fit.measures=TRUE, test = "D2",
        omit.imps = c("no.conv", "no.se", 1, 6, 9, 13, 14, 15) )
## or 
summary(cfa4out, standardized = TRUE, rsquare=TRUE, fit.measures=TRUE, test = "D2",
        omit.imps = c("no.conv", "no.se", "no.npd") )

Terrence D. Jorgensen    (he, him, his)
Assistant Professor, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam
http://www.uva.nl/profile/t.d.jorgensen

Bryan Stiles

unread,
Apr 1, 2025, 1:41:15 PM4/1/25
to lavaan
Thank you, Dr. Jorgensen! Very helpful. 
Reply all
Reply to author
Forward
0 new messages