# Approaches to negative variance solutions

69 views

### Conal Monaghan

Jan 16, 2019, 2:25:36 AM1/16/19
to lavaan
Hi,
I am looking for basic solutions to the negative variance problem. The model is a two-tier hierarchical model, comprising one higher order factor with three lower level factors. One factor, critical, has a negative variance issue (-88.070; see below) with a loading on 210.805. I was wondering what the problem solving strategy would be from here? Please find appropriate output below.

I tried placing "Critical" first to force lavaan to constrain this to one. However, this exacerbated the issue ( Variances with critical placed first: Critical = -1132.998; minimising = 0.925; helpful =1.075; support =1133.969)

Cheers and thank you very much in advance,
Conal

########## Model definition #####################

Model6 <- 'Critical =~ Q3.1_9 + Q3.1_7 + Q3.1_8 + Q3.1_14 + Q3.1_15 + Q3.1_12 + Q3.1_6 + Q3.1_16 + Q3.1_11 + Q3.1_13 + Q3.1_10 # Critical items

minimising =~ Q3.1_19 + Q3.1_18 + Q3.1_29 + Q3.1_35 + Q3.1_20 + Q3.1_17 + Q3.1_33 + Q3.1_27 + Q3.1_31 + Q3.1_36 + Q3.1_4 + Q3.1_28 + Q3.1_25 + Q3.1_30 + Q3.1_26 # minimising items

helpful =~ Q4_17 + Q4_19 + Q4_13 + Q4_12 + Q4_18 + Q4_16 + Q4_15 + Q4_11 + Q4_10 + Q4_9 + Q4_3 + Q4_8 + Q4_4 + Q4_6 + Q4_2 # helpful items

Support =~   helpful + minimising  + Critical   # higher-order factor definition

# error covariances #
Q4_16 ~~ Q4_15
Q3.1_27 ~~ Q3.1_28
Q3.1_7 ~~ Q3.1_8
Q3.1_19 ~~ Q3.1_18
Q3.1_31 ~~ Q3.1_28
Q3.1_35 ~~ Q3.1_36

'

> summary(cfa(Model6, data = Sample2, estimator="MLR"))

lavaan 0.6-3 did NOT end normally after 1665 iterations
** WARNING ** Estimates below are most likely unreliable

Optimization method                           NLMINB
Number of free parameters                         91

Number of observations                           368

Estimator                                               ML
Model Fit Test Statistic                          NA
Degrees of freedom                               NA
P-value                                                   NA

Parameter Estimates:

Information                                               Observed
Observed information based on                Hessian
Standard Errors                                        Robust.huber.white

Latent Variables:
Estimate  Std.Err  z-value  P(>|z|)
Critical =~
Q3.1_9            1.000
Q3.1_7            0.990       NA
Q3.1_8            0.964       NA
Q3.1_14           0.947       NA
Q3.1_15           1.009       NA
Q3.1_12           1.028       NA
Q3.1_6            0.897       NA
Q3.1_16           1.018       NA
Q3.1_11           0.913       NA
Q3.1_13           1.035       NA
Q3.1_10           1.017       NA
minimising =~
Q3.1_19           1.000
Q3.1_18           0.918       NA
Q3.1_29           0.794       NA
Q3.1_35           0.788       NA
Q3.1_20           0.993       NA
Q3.1_17           0.880       NA
Q3.1_33           0.871       NA
Q3.1_27           0.938       NA
Q3.1_31           0.864       NA
Q3.1_36           0.769       NA
Q3.1_4            0.810       NA
Q3.1_28           0.899       NA
Q3.1_25           0.930       NA
Q3.1_30           0.827       NA
Q3.1_26           0.794       NA
Q4_17             1.000
Q4_19             1.101       NA
Q4_13             1.003       NA
Q4_12             0.854       NA
Q4_18             1.046       NA
Q4_16             0.797       NA
Q4_15             0.781       NA
Q4_11             0.853       NA
Q4_10             0.842       NA
Q4_9              0.954       NA
Q4_3              0.690       NA
Q4_8              0.801       NA
Q4_4              0.861       NA
Q4_6              0.946       NA
Q4_2              0.575       NA
support =~
minimising        1.320       NA
Critical              210.805    NA

Covariances:
Estimate  Std.Err  z-value  P(>|z|)
.Q4_16 ~~
.Q4_15             0.339       NA
.Q3.1_27 ~~
.Q3.1_28           0.392       NA
.Q3.1_7 ~~
.Q3.1_8            0.397       NA
.Q3.1_19 ~~
.Q3.1_18           0.279       NA
.Q3.1_31 ~~
.Q3.1_28           0.336       NA
.Q3.1_35 ~~
.Q3.1_36           0.308       NA

Variances:
Estimate  Std.Err  z-value  P(>|z|)
.Q3.1_9            0.696       NA
.Q3.1_7            0.740       NA
.Q3.1_8            0.786       NA
.Q3.1_14           0.745       NA
.Q3.1_15           0.681       NA
.Q3.1_12           0.614       NA
.Q3.1_6            0.741       NA
.Q3.1_16           0.694       NA
.Q3.1_11           0.776       NA
.Q3.1_13           0.599       NA
.Q3.1_10           0.797       NA
.Q3.1_19           0.760       NA
.Q3.1_18           0.698       NA
.Q3.1_29           0.861       NA
.Q3.1_35           0.830       NA
.Q3.1_20           0.803       NA
.Q3.1_17           0.707       NA
.Q3.1_33           0.957       NA
.Q3.1_27           0.955       NA
.Q3.1_31           1.109       NA
.Q3.1_36           0.981       NA
.Q3.1_4            1.058       NA
.Q3.1_28           1.015       NA
.Q3.1_25           0.980       NA
.Q3.1_30           0.937       NA
.Q3.1_26           1.052       NA
.Q4_17             0.524       NA
.Q4_19             0.396       NA
.Q4_13             0.491       NA
.Q4_12             0.700       NA
.Q4_18             0.480       NA
.Q4_16             0.805       NA
.Q4_15             0.721       NA
.Q4_11             0.724       NA
.Q4_10             0.710       NA
.Q4_9              0.456       NA
.Q4_3              0.676       NA
.Q4_8              0.650       NA
.Q4_4              0.636       NA
.Q4_6              0.590       NA
.Q4_2              0.651       NA
Critical        -88.070       NA
minimising      0.921       NA
support           0.002       NA

Warning message:
In lavaan::lavaan(model = Model6, data = Sample2, estimator = "MLR",  :
lavaan WARNING: the optimizer warns that a solution has NOT been found!

### Gary Burns

Jan 16, 2019, 1:47:38 PM1/16/19
to lavaan
Tried to respond via email but it didn't work. Or I'm double posting.

Hi Conal,

I'm following this to see what others suggest as well.

You could try to constrain the variance of critical latent variable to small negative value. In LISREL I would constrain to be greater than zero, but I haven't found that option in lavaan. So you could do something like: Critical~~.05*Critical

I've seen others post something like the below code, but it has been unsuccessful for me:
Critical~~x*Crtical
x > 0

However, these solutions don't address the underlying problem of why this is happening.

Do you have these problems when you try to estimate the model without the error covariances? That would be my first step in trouble shooting this. Next I would constrain the second-order loadings to be equal and see how the model responded.

### Terrence Jorgensen

Jan 16, 2019, 6:23:28 PM1/16/19
to lavaan
One factor, critical, has a negative variance issue (-88.070; see below) with a loading on 210.805.

I would hesitate to conclude that.  Your model did not converge, so that is not a ML estimate, just the place where the optimizer gave up trying.  What does your factor covariance matrix look like in the first-order CFA (without a higher-order factor)?  I expect it could provide a clue as to why this model fails to converge.

Terrence D. Jorgensen
Assistant Professor, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam

### Conal Monaghan

Jan 16, 2019, 7:53:51 PM1/16/19
to lavaan
Thank you both for the help. Without the higher-order factor, the model fits the data relatively well:
chisq                         df                     pvalue             cfi.robust                  srmr          rmsea.robust rmsea.ci.lower.robust rmsea.ci.upper.robust
1886.076               770.000                 0.000                 0.900                 0.069                 0.059                 0.055                         0.063

I think you raise a good point, there is an issue with negative covar between two of the factors; minimising ~~  helpful =  -0.010

Covariances:
Estimate  Std.Err  z-value  P(>|z|)
.Q4_16 ~~
.Q4_15             0.339    0.061    5.568    0.000
.Q3.1_27 ~~
.Q3.1_28           0.393    0.073    5.375    0.000
.Q3.1_7 ~~
.Q3.1_8            0.397    0.058    6.858    0.000
.Q3.1_19 ~~
.Q3.1_18           0.279    0.056    5.025    0.000
.Q3.1_31 ~~
.Q3.1_28           0.336    0.070    4.809    0.000
.Q3.1_35 ~~
.Q3.1_36           0.308    0.068    4.512    0.000
Critical ~~
minimising        0.553    0.065    8.555    0.000
minimising ~~

Variances:
Estimate  Std.Err  z-value  P(>|z|)
.Q3.1_9            0.696    0.065   10.780    0.000
.Q3.1_7            0.740    0.064   11.517    0.000
.Q3.1_8            0.786    0.063   12.462    0.000
.Q3.1_14           0.745    0.068   11.028    0.000
.Q3.1_15           0.681    0.059   11.625    0.000
.Q3.1_12           0.614    0.057   10.773    0.000
.Q3.1_6            0.741    0.054   13.817    0.000
.Q3.1_16           0.694    0.062   11.129    0.000
.Q3.1_11           0.776    0.065   11.894    0.000
.Q3.1_13           0.599    0.056   10.668    0.000
.Q3.1_10           0.797    0.076   10.431    0.000
.Q3.1_19           0.760    0.075   10.179    0.000
.Q3.1_18           0.697    0.070    9.975    0.000
.Q3.1_29           0.860    0.073   11.822    0.000
.Q3.1_35           0.830    0.078   10.665    0.000
.Q3.1_20           0.803    0.084    9.575    0.000
.Q3.1_17           0.707    0.064   10.993    0.000
.Q3.1_33           0.957    0.086   11.107    0.000
.Q3.1_27           0.955    0.096    9.938    0.000
.Q3.1_31           1.109    0.098   11.360    0.000
.Q3.1_36           0.981    0.082   12.003    0.000
.Q3.1_4            1.058    0.083   12.781    0.000
.Q3.1_28           1.015    0.081   12.512    0.000
.Q3.1_25           0.980    0.088   11.095    0.000
.Q3.1_30           0.937    0.080   11.651    0.000
.Q3.1_26           1.052    0.085   12.346    0.000
.Q4_17             0.524    0.047   11.080    0.000
.Q4_19             0.396    0.043    9.309    0.000
.Q4_13             0.490    0.048   10.285    0.000
.Q4_12             0.700    0.065   10.758    0.000
.Q4_18             0.481    0.046   10.546    0.000
.Q4_16             0.804    0.073   11.064    0.000
.Q4_15             0.721    0.060   11.950    0.000
.Q4_11             0.724    0.065   11.095    0.000
.Q4_10             0.710    0.061   11.557    0.000
.Q4_9              0.456    0.044   10.337    0.000
.Q4_3              0.676    0.053   12.785    0.000
.Q4_8              0.650    0.055   11.908    0.000
.Q4_4              0.636    0.058   10.974    0.000
.Q4_6              0.590    0.055   10.812    0.000
.Q4_2              0.651    0.047   13.922    0.000
Critical          0.967    0.092   10.531    0.000
minimising     0.925    0.099    9.366    0.000