Higher-Order Confirmatory FA
Message/Author
 Morayo Ayodele posted on Saturday, June 30, 2012 - 2:25 pm
Hello Dr. Muthen,

I am trying to run a third-order factor CFA with TWO second-order factors both of which have TWO first-order factors each. I understand that this model is not directly identified but I have substantive reasons to suggest such a model. Moreover, I have come across articles where similar models were run. Could you please advice on the appropriate syntax to use that would return an output without errors?

For the second-order model, this is the syntax I feel is most reasonable:

Model:
f1 by sglse41 sglse42 sglse67 sglse76 sglse100 sglse30 sglse40 sglse55 sglse83 sglse92 sglse97 sglse102;
f2 by sglse3 sglse17 sglse25 sglse68 sglse35 sglse58 sglse78 sglse84 sglse94 sglse96 sglse98;

f3 by f1* f2;
f3@1;
Output: Sampstat standardized mod;

For the third-order model, this is the syntax I feel is most reasonable:

Model:
f1 by sglse3 sglse17 sglse25 sglse68;
f2 by sglse41 sglse42 sglse67 sglse76 sglse100;
f3 by sglse35 sglse58 sglse78 sglse84 sglse94 sglse96 sglse98;
f4 by sglse30 sglse40 sglse55 sglse83 sglse92 sglse97 sglse102;

f5 by f1* f2;
f6 by f3* f4;
f7 by f5* f6;

f5@1;
f6@1;
f7@1;
Output: Sampstat standardized mod;
 Linda K. Muthen posted on Sunday, July 01, 2012 - 10:45 am
A second-order factor must have a minimum of three first-order factors to be identified unless you place a restriction on the model such as having both factor loadings equal to one. The model with three second-order factors may be identified by borrowing from other parts of the model.
 Morayo Ayodele posted on Tuesday, July 03, 2012 - 10:23 am
Thank you very much. Your suggestion solved the problem.
 Morayo Ayodele posted on Friday, July 06, 2012 - 8:57 am
Hello Dr. Muthen,

After constraining the two first-order factors to 1, I observed that the fit indices for both the two-factor model and the second-order model are exactly the same.

Does this matter or does it indicate an error somewhere?

Model:
f1 by sglse41 sglse42 sglse67 sglse76 sglse100 sglse30 sglse40 sglse55 sglse83 sglse92 sglse97 sglse102;
f2 by sglse3 sglse17 sglse25 sglse68 sglse35 sglse58 sglse78 sglse84 sglse94 sglse96 sglse98;

f3 by f1@1 f2@1;

Output: Sampstat standardized mod;
 Linda K. Muthen posted on Friday, July 06, 2012 - 11:06 am
There are no degrees of freedom for the second-order factor. You cannot asses the fit of it above the fit of the first-order factors. You would need at least four first-order indicators.
 Morayo Ayodele posted on Sunday, July 08, 2012 - 10:48 am
Thank you
 Jiyeon So posted on Monday, May 11, 2015 - 9:56 am
Hi Dr. Muthen,

I am testing similar models (from the case above) and want to see if a CFA model with a single factor on the 3rd order has equivalent or better model fit compared to a 2nd order. Here goes the syntax:

- 3rd order unidimensional model:

Pervasive by SS1 SS2 SS3 SS4;
Redundancy by SS6 SS7 SS8;
Exhaustion by SS11 SS12 SS13;
Tedium by SS14 SS15 SS16;

Perception by pervasive redundancy;
Experience by exhaustion tedium;

Fatigue by perception experience;

While the model fit reported in the output for the 3rd order CFA is good, I observed a heywood case, in which one of the standardized factor loadings (fatigue to perception) is over 1.00 (1.01) and the residual variance for that indicator is negative ( - .02). I think this is identification issue caused by the 3rd order factor having only two indicators in the 2nd order. I've tried inserting equality constraint on the two factor loadings from the 3rd order factor to the two 2nd order factors but it doesn't help (and the output actually shows unequal coefficients - so the program seems to not reflect the constraint i've placed).

This is the equality constraint i added to the 3rd order CFA.

fatigue by experience perception (1);

Jiyeon
 Bengt O. Muthen posted on Monday, May 11, 2015 - 6:13 pm
Setting those loadings equal does not resolve it because you are trying to estimate 1 loading and 1 factor variance from only 1 piece of covariance information. You need to fix both loadings at 1.
 Jiyeon So posted on Tuesday, May 12, 2015 - 9:15 am
Thank you Dr. Bengt for your feedback. That makes sense.

I used the following syntax in an effort to fix both loadings at 1.00.

Fatigue by perception@1 experience@1;

However, the output still shows standardized factor loading of 1.24 (for fatigue --> perception) and negative residual variance for perception (-.53).

I still have a warning stating that "the latent variable covariance matrix is not positive definite..... problem involving variable perception."

Could you direct me to what i can try now?

Thank you very much in advance.

Jiyeon
 Bengt O. Muthen posted on Tuesday, May 12, 2015 - 5:35 pm
Even if you fix a raw loading at 1 you get a standardized loading different from 1 because the IV and DV variances may not be 1.

In some cases you might want to fix the negative residual at zero. Which would say that perception is the same as fatigue. But remember that a 2-indicator model is not a strong model.
 Michael Reichenheim posted on Thursday, December 15, 2016 - 2:53 pm
Hello,

I'm running a higher-order CFA model and need to work with the standardized loadings in MODEL CONSTRAINT (Schmid–Leiman transformation ...).

Given that I can get:

. . .
f1 BY i_1 (lam_1)
. . .
i_k (lam_k) ;
f2 BY . . .
f3 BY . . .

lam_1 (ve_1) ;
. . .
lam_k (ve_k) ;

f_HO BY F1 (lamho1)
F2 (lamho2)
F3 (lamho3) ;

f1 (fv1) ;
f2 (fv2) ;
f3 (fv3) ;

fHO (f_ho_v) ;

... how do I calculate the lam_z_k estimates in MODEL CONSTRAINT (since the 'usual' equation is not suitable)?

Thanks.
 Bengt O. Muthen posted on Friday, December 16, 2016 - 5:32 pm
I don't know what you mean by the lam_z_k estimates or the usual equation.
 Michael Reichenheim posted on Saturday, December 17, 2016 - 5:36 am
Hi Bengt,

Sorry ... lam_z_k would be the standardized estimate obtained by the ‘usual equation’ (used in a regular/simple CFA):

lam_z_k = SQRT(lam_k**2 * fv) / SQRT( (lam_k **2 * vf) + ve_k) ;

To be concrete, if I specify (focusing just on item 6 belonging to factor 2, for instance):

f2 BY i6 (lam6);
fHO BY f1 (lamho1) f2 (lamho2) f3 (lamho3);
i6 (ve6);
f2 (vf2);
fHO (vfho);

MODEL CONSTRAINT:
NEW (... l6 ...);
l6 = SQRT(lam6**2 * vf2) / SQRT( (lam6**2 * vf2) + ve6) ;

... I get (output):

F2 BY i6 1.268 ...

FHO BY F2 0.895 ...

Variances FHO 0.845 ...

Residual Var i6 0.956 ...
F2 0.284 ...

STDYX Standardiz i6 0.786 ...

I know there’s something missing in the above equation to get from 0.569 to 0.786 (which would be the same in a basic, single-order CFA). This must be trivial, but I’m not figuring it out. Your help would be much appreciated.

Btw, Happy Holidays to you all.
 Bengt O. Muthen posted on Monday, December 19, 2016 - 5:57 pm
First note that you can give only one label per row.

Second, note the with the higher-order factor fHO, f2 refers to the residual variance not the variance of f2. So in Model Constraint replace vf2 with

lamho2**2*vfho+vf2;
 Michael Reichenheim posted on Tuesday, December 20, 2016 - 1:31 am
Yes, labels are one per row in the real *inp; shown above was only due to some editing to fit the msg space limit.

It worked (of course). Thanks so much.