Feb 5, 2019, 5:53:04 AM2/5/19

to lavaan

Hello all,

We're having a problem with our data outcome and would welcome any advice.

We have a 3-factor CFA model (which previously showed to fit better than a 2-factor CFA model), with 4 indicators for 1 factor(F1), 4 for F2 and 1 indicator loading on F3 (this was not what we wanted, but it was data driven).

All the correlations (parametric and non-parametric) between the observed measures are positive as expected.

When we run a CFA for these measures at Timepoint 1, everything looks like we expected:

CODE FOR TIME 1:

HS.modelT1dual <- 'F1T1 =~ y1T1 + y2T1 + y3T1 + y4T1

F2T1 =~ y5T1 + y6T1 + y7T1 + y8T1

F3T1 =~ y9T1'

__ __

cfaT1dual <- cfa(HS.modelT1dual, data=data,estimator = "MLR", std.lv=TRUE, missing="fiml")

summary(cfaT1dual, fit.measures=TRUE, modindices = TRUE, standardized=TRUE, rsquare=TRUE)

__ __

__OUTCOME FOR TIME 1:__

Latent Variables:

Estimate Std.Err z-value P(>|z|) Std.lv Std.all

F1T1 =~

y1T1 0.067 0.028 2.398 0.016 0.067 0.362

y2T1 11.918 2.235 5.332 0.000 11.918 0.509

y3T1 0.307 0.088 3.476 0.001 0.307 0.404

y4T1 0.116 0.027 4.220 0.000 0.116 0.535

F2T1 =~

y5T1 3.515 0.475 7.396 0.000 3.515 0.547

y6T1 6.949 1.011 6.873 0.000 6.949 0.564

y7T1 1.565 0.193 8.095 0.000 1.565 0.642

y8T1 2.199 0.130 16.952 0.000 2.199 0.897

F3T1 =~

Y9T1 0.156 0.008 20.154 0.000 0.156 1.000

__ __

Covariances:

Estimate Std.Err z-value P(>|z|) Std.lv Std.all

F1T1 ~~

F2T1 0.763 0.115 6.614 0.000 0.763 0.763

F3T1 0.732 0.127 5.767 0.000 0.732 0.732

F2T1 ~~

F3T1 0.537 0.069 7.756 0.000 0.537 0.537

However, when we do the same for Time 2, the single indicator (y9) loads negatively onto it's factor

CODE FOR TIME 2:

__ __

HS.modelT2dual <- 'F1T2 =~ y1T2 + y2T2 + y3T2 + y4T2

F2T2 =~ y5T2 + y6T2 + y7T2 + y8T2

F3T2 =~ y9T2'

__ __

cfaT2dual <- cfa(HS.modelT2dual, data = data, estimator = "MLR", std.lv=TRUE, missing="fiml")

summary(cfaT2dual, fit.measures=TRUE,modindices=TRUE, standardized=TRUE, rsquare=TRUE)

__ __

__OUTCOME FOR TIME 2:__

Latent Variables:

Estimate Std.Err z-value P(>|z|) Std.lv Std.all

F1T2 =~

y1T2 0.077 0.025 3.074 0.002 0.077 0.401

y2T2 11.298 1.747 6.466 0.000 11.298 0.552

y3T2 0.281 0.075 3.765 0.000 0.281 0.366

y4T2 0.113 0.019 6.081 0.000 0.113 0.572

F2T2 =~

y5T2 2.726 0.434 6.277 0.000 2.726 0.521

y6T2 7.783 1.171 6.644 0.000 7.783 0.573

y7T2 2.857 0.301 9.487 0.000 2.857 0.729

y8T2 3.213 0.317 10.149 0.000 3.213 0.784

F3T2 =~

y9T2 -0.118 0.007 -15.837 0.000 -0.118 -1.000

__ __

Covariances:

Estimate Std.Err z-value P(>|z|) Std.lv Std.all

F1T2 ~~

F2T2 0.708 0.082 8.650 0.000 0.708 0.708

F3T2 -0.650 0.109 -5.953 0.000 -0.650 -0.650

F2T2 ~~

F3T2 -0.448 0.068 -6.607 0.000 -0.448 -0.448

We tried multiple things to understand this or to fix it but nothing made it positive:

1) we tried to specify the variance of the observed variable to be equal to 0 (y9T2~~0*y9T2)

__ __

2) we checked modification indices and improved the model by fixing covariance and variance, but y9 estimation remains negative.

__ __

3) we tried Bootstrapping

__ __

4) I don't think we can try and force the sign to flip, as we're using the factor loadings in regressions.

When forcing y9 to load onto F2, it is positive and there is no problem, but 3-factor model is better than 2-factor model. covariance and variance is also only negative when y9 is indicator of its own factor and not when loading onto F2.

__ __

Basically, to us it seems best to just drop y9 as an observed measure, but we can't find a data driven justification (AIC for model including y9 is better than without it, but CFI and RMSEA fit indices are better for the 2-factor model).

I read about Heywood cases, but I don't think this is such a case. But since it is a single indicator, we don't have error variance for y9.

If anyone knows of any references about a single indicator loading negatively onto its factor or any reference that would help us to find justification to drop y9.

Any advice on how to deal with this weird measure that decides to flip is more than welcome.

Feb 5, 2019, 6:25:21 AM2/5/19

to lavaan

We tried multiple things to understand this or to fix it but nothing made it positive:

You said this was data-driven. Did you check your data to see if y9 is in fact negatively correlated with your other variables at time 2?

`lavInspect(cfaT2dual, "sampstat")`

1) we tried to specify the variance of the observed variable to be equal to 0 (y9T2~~0*y9T2)

That should already be the case (lavaan's default behavior), simply for identification.

2) we checked modification indices and improved the model by fixing covariance and variance, but y9 estimation remains negative.

Modification indices tell you what fixed parameters to free, not what free parameters to fix.

3) we tried Bootstrapping

That does not change the point estimates, it just estimates an empirical sampling distribution of the point estimates (or any other statistic) for inference.

4) I don't think we can try and force the sign to flip, as we're using the factor loadings in regressions.

What does that mean? factor loadings *are* regressions. You can constrain it to be positive with a label:

`F3T2 =~ foo*y9T2`

...

foo > 0

If anyone knows of any references about a single indicator loading negatively onto its factor or any reference that would help us to find justification to drop y9.

This has nothing to do with lavaan. Try posting on SEMNET:

Terrence D. Jorgensen

Assistant Professor, Methods and Statistics

Research Institute for Child Development and Education, the University of Amsterdam

Feb 5, 2019, 6:36:23 AM2/5/19

to lavaan

Hi Terrence,

Thank you for taking the time to answer my questions. I just have a final question on your suggestion to just make it positive.

Did you check your data to see if y9 is in fact negatively correlated with your other variables at time 2?

lavInspect(cfaT2dual, "sampstat")

Yes we did try this, they are all positive as we would expect them to be.

4) I don't think we can try and force the sign to flip, as we're using the factor loadings in regressions.

What does that mean? factor loadingsareregressions. You can constrain it to be positive with a label:

F3T2 =~ foo*y9T2

...

foo > 0

I mean that we will be using the latent factors in extra regressions after the CFA (sorry for not being clear). I read somewhere that you can't just use the latent factor if you have flipped the sign. I am also really not sure about using this latent factor in further regressions if I do not understand why it is negative in the first place, while it should be positive.

I can't really find any references on this though.

Just a lot of uncertainties about this unexpected negative loading.

Thank you so much for your help.

Ilse

Reply all

Reply to author

Forward

0 new messages

Search

Clear search

Close search

Google apps

Main menu