Measurement invariance is a very important requisite in multiple group structural equation modeling. It attempts to verify that the estimated factors are measuring the same underlying latent construct within each group.
This page will show the steps and the Stata code for checking invariance using a
single factor model with two groups. The data are found in an ssd file named
invariance.dta. There are five items in the data, cesd01, cesd02,
cesd07, cesd11 and cesd20
along with a grouping variable grp
.
use https://stats.idre.ucla.edu/stat/data/invariance.dta, clear
The steps that follow assume that the researchers has already performed several very necessary preliminary steps including:
1. Separate CFAs models have been estimated for each group and no estimation problems occurred
2. A combined CFA models has been estimated on all observations treated as a single group and and no estimation problems occurred
We are also going to assume that each group has the same number of factors, in this case, one.
We will begin by estimating a two group model in which all parameters are freely estimated. For model identification purposes we will fix the loading for the first item at one and the item 1 intercepts at zero. We fix the item 1 intercepts at zero so that we can estimate the factor means. This model with all parameters free gives us an idea of the best fit for the measurement model that we can obtain with these data.
* model 1 -- free all parameterssem (Somatic -> cesd01 cesd02 cesd07 cesd11 cesd20) /// (cesd01 <- Somatic _cons@0), /// /* set intercept to 0 in both groups */ group(grp) mean(Somatic) /// ginvariant(none) /* all parameters to vary freely */
Endogenous variables Measurement: cesd01 cesd02 cesd07 cesd11 cesd20 Exogenous variables Latent: Somatic Fitting target model: Iteration 0: log likelihood = -13308.842 (not concave) Iteration 1: log likelihood = -12625.491 Iteration 2: log likelihood = -12556.186 Iteration 3: log likelihood = -12481.608 Iteration 4: log likelihood = -12474.282 Iteration 5: log likelihood = -12473.251 Iteration 6: log likelihood = -12473.244 Iteration 7: log likelihood = -12473.244 Structural equation model Number of obs = 2,252 Grouping variable = grp Number of groups = 2 Estimation method = ml Log likelihood = -12473.244 ( 1) [cesd01]1bn.grp#c.Somatic = 1 ( 2) [cesd01]1bn.grp = 0 ( 3) [cesd01]2.grp#c.Somatic = 1 ( 4) [cesd01]2.grp = 0 ------------------------------------------------------------------------------ | OIM | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- Measurement | cesd01 <- | Somatic | [*] | 1 (constrained) _cons | [*] | 0 (constrained) -----------+---------------------------------------------------------------- cesd02 <- | Somatic | 1 | .9284349 .062672 14.81 0.000 .8056001 1.05127 2 | .8385603 .1891737 4.43 0.000 .4677867 1.209334 _cons | 1 | -.0648223 .0273122 -2.37 0.018 -.1183533 -.0112914 2 | .0525947 .0860598 0.61 0.541 -.1160794 .2212687 -----------+---------------------------------------------------------------- cesd07 <- | Somatic | 1 | 1.677874 .1007259 16.66 0.000 1.480455 1.875293 2 | 1.758978 .3554222 4.95 0.000 1.062363 2.455592 _cons | 1 | -.0653832 .0428129 -1.53 0.127 -.1492949 .0185285 2 | .1893831 .1541628 1.23 0.219 -.1127704 .4915366 -----------+---------------------------------------------------------------- cesd11 <- | Somatic | 1 | 1.388108 .0901113 15.40 0.000 1.211494 1.564723 2 | 1.341266 .2818224 4.76 0.000 .7889044 1.893628 _cons | 1 | .1565085 .0391205 4.00 0.000 .0798338 .2331832 2 | .1181805 .122693 0.96 0.335 -.1222935 .3586544 -----------+---------------------------------------------------------------- cesd20 <- | Somatic | 1 | 1.474365 .090211 16.34 0.000 1.297554 1.651175 2 | 1.491463 .2826398 5.28 0.000 .9374992 2.045427 _cons | 1 | -.0469629 .0383135 -1.23 0.220 -.122056 .0281301 2 | -.0675701 .1211359 -0.56 0.577 -.3049921 .1698518 -------------+---------------------------------------------------------------- mean(Somatic)| 1 | .32834 .0157635 20.83 0.000 .2974441 .3592359 2 | .35081 .0446253 7.86 0.000 .2633461 .4382739 -------------+---------------------------------------------------------------- var(e.cesd01)| 1 | .3762446 .0136731 .3503779 .4040208 2 | .3686831 .0406344 .2970557 .4575815 var(e.cesd02)| 1 | .3219994 .0117202 .2998284 .3458098 2 | .4852692 .0485134 .3989204 .5903088 var(e.cesd07)| 1 | .4220553 .0197965 .3849849 .4626952 2 | .8977669 .1035432 .7161286 1.125476 var(e.cesd11)| 1 | .5876808 .0221566 .5458203 .6327516 2 | .6459514 .0705419 .5214868 .8001224 var(e.cesd20)| 1 | .3656715 .0162806 .3351148 .3990144 2 | .3808459 .0549204 .2870784 .5052404 var(Somatic)| 1 | .1217268 .012324 .0998179 .1484445 2 | .1251875 .0377595 .0693135 .2261016 ------------------------------------------------------------------------------ Note: [*] identifies parameter estimates constrained to be equal across groups. LR test of model vs. saturated: chi2(10) = 25.11, Prob > chi2 = 0.0051
We will record the chi-square value (25.11) and degrees of freedom (10) for comparison with the next model. The p-value for this model (.0051) indicates that this does not fit our data particularly well. If this were a real analysis, you would want to improve the overall fit of the model BEFORE proceeding. However, for illustration purposes we will focus on the steps needed to check factor invariance.
Checking factor invariance involves a hierarchy of steps that progressively constrains parameters to be equal across groups. Here is a list of the necessary steps along with which parameters are being constrained.
model 1 -- all parameters free (above) model 2 -- metric (pattern) invariance -- loadings are invariant model 3 -- strong (scalar) invariance -- loadings & intercepts are invariant model 4 -- strict invariance -- loadings, intercepts & residuals are invariant model 5 -- strict invariance plus factor means are invariant model 6 -- strict invariance plus factor means & variances are invariant
Now we can check for metric invariance.
* model 2 -- metric invariance -- loadings invariantsem (Somatic -> cesd01 cesd02 cesd07 cesd11 cesd20) /// (cesd01 <- Somatic _cons@0), /// /* set intercept to 0 in both groups */ group(grp) mean(Somatic) /// ginvariant(mcoef) /* constrain loadings to be equal */
Endogenous variables Measurement: cesd01 cesd02 cesd07 cesd11 cesd20 Exogenous variables Latent: Somatic Fitting target model: Iteration 0: log likelihood = -13284.565 (not concave) Iteration 1: log likelihood = -12617.646 Iteration 2: log likelihood = -12524.354 Iteration 3: log likelihood = -12478.374 Iteration 4: log likelihood = -12474.31 Iteration 5: log likelihood = -12473.476 Iteration 6: log likelihood = -12473.472 Iteration 7: log likelihood = -12473.472 Structural equation model Number of obs = 2,252 Grouping variable = grp Number of groups = 2 Estimation method = ml Log likelihood = -12473.472 ( 1) [cesd01]1bn.grp#c.Somatic = 1 ( 2) [cesd02]1bn.grp#c.Somatic - [cesd02]2.grp#c.Somatic = 0 ( 3) [cesd07]1bn.grp#c.Somatic - [cesd07]2.grp#c.Somatic = 0 ( 4) [cesd11]1bn.grp#c.Somatic - [cesd11]2.grp#c.Somatic = 0 ( 5) [cesd20]1bn.grp#c.Somatic - [cesd20]2.grp#c.Somatic = 0 ( 6) [cesd01]1bn.grp = 0 ( 7) [cesd01]2.grp#c.Somatic = 1 ( 8) [cesd01]2.grp = 0 ------------------------------------------------------------------------------ | OIM | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- Measurement | cesd01 <- | Somatic | [*] | 1 (constrained) _cons | [*] | 0 (constrained) -----------+---------------------------------------------------------------- cesd02 <- | Somatic | [*] | .9209277 .0593449 15.52 0.000 .8046138 1.037242 _cons | 1 | -.0623574 .0264546 -2.36 0.018 -.1142075 -.0105072 2 | .0236994 .0601589 0.39 0.694 -.0942099 .1416087 -----------+---------------------------------------------------------------- cesd07 <- | Somatic | [*] | 1.681261 .0965874 17.41 0.000 1.491953 1.870568 _cons | 1 | -.0664951 .0417905 -1.59 0.112 -.148403 .0154128 2 | .216647 .0949812 2.28 0.023 .0304873 .4028067 -----------+---------------------------------------------------------------- cesd11 chi2 = 0.0293
For this model chi-square equals 25.57 with 10 degrees of freedom. We can compare this with model 1 by computing the differences in chi-square and degrees of freedom.
chi2 = 25.57 - 25.11 = .46 with df(14-10 = 4), p-value = .97727633
The extremely small change in chi-square tells us that the model in which the factor loadings are constrained to be equal fits equally as well as the model with all parameters free to vary. The bottom line is that we have demonstrated metric factor invariance for this single factor model.
Next, we can check for strong invariance in which both factor loadings and intercepts are constrained
to be equal across groups. By default, the sem estimates a model with strong invariance
whenever you include the group option. Our version of strong invariance fits the same but is
parameterized slightly differently by adding the ginvariant(mcoef mcons)
option.
* model 3 -- strong invariance -- loadings & intercepts invariantsem (Somatic -> cesd01 cesd02 cesd07 cesd11 cesd20) /// (cesd01 <- Somatic _cons@0), /// /* set intercept to 0 in both groups */ group(grp) mean(Somatic) /// ginvariant(mcoef mcons) /* add equal intercepts */
Endogenous variables Measurement: cesd01 cesd02 cesd07 cesd11 cesd20 Exogenous variables Latent: Somatic Fitting target model: Iteration 0: log likelihood = -13516.826 (not concave) Iteration 1: log likelihood = -12656.789 Iteration 2: log likelihood = -12525.14 Iteration 3: log likelihood = -12486.67 Iteration 4: log likelihood = -12483.934 Iteration 5: log likelihood = -12483.841 Iteration 6: log likelihood = -12483.841 Structural equation model Number of obs = 2,252 Grouping variable = grp Number of groups = 2 Estimation method = ml Log likelihood = -12483.841 ( 1) [cesd01]1bn.grp#c.Somatic = 1 ( 2) [cesd02]1bn.grp#c.Somatic - [cesd02]2.grp#c.Somatic = 0 ( 3) [cesd07]1bn.grp#c.Somatic - [cesd07]2.grp#c.Somatic = 0 ( 4) [cesd11]1bn.grp#c.Somatic - [cesd11]2.grp#c.Somatic = 0 ( 5) [cesd20]1bn.grp#c.Somatic - [cesd20]2.grp#c.Somatic = 0 ( 6) [cesd01]1bn.grp = 0 ( 7) [cesd02]1bn.grp - [cesd02]2.grp = 0 ( 8) [cesd07]1bn.grp - [cesd07]2.grp = 0 ( 9) [cesd11]1bn.grp - [cesd11]2.grp = 0 (10) [cesd20]1bn.grp - [cesd20]2.grp = 0 (11) [cesd01]2.grp#c.Somatic = 1 (12) [cesd01]2.grp = 0 ------------------------------------------------------------------------------ | OIM | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- Measurement | cesd01 <- | Somatic | [*] | 1 (constrained) _cons | [*] | 0 (constrained) -----------+---------------------------------------------------------------- cesd02 <- | Somatic | [*] | .9249713 .0595197 15.54 0.000 .808315 1.041628 _cons | [*] | -.0560224 .0260189 -2.15 0.031 -.1070185 -.0050263 -----------+---------------------------------------------------------------- cesd07 <- | Somatic | [*] | 1.688931 .0971186 17.39 0.000 1.498582 1.87928 _cons | [*] | -.0512986 .0412588 -1.24 0.214 -.1321644 .0295671 -----------+---------------------------------------------------------------- cesd11 <- | Somatic | [*] | 1.376833 .0854903 16.11 0.000 1.209275 1.544391 _cons | [*] | .1552549 .0371766 4.18 0.000 .08239 .2281198 -----------+---------------------------------------------------------------- cesd20 <- | Somatic | [*] | 1.471056 .0854948 17.21 0.000 1.303489 1.638622 _cons | [*] | -.046954 .0364192 -1.29 0.197 -.1183343 .0244264 -------------+---------------------------------------------------------------- mean(Somatic)| 1 | .324698 .0152092 21.35 0.000 .2948886 .3545075 2 | .3795511 .0299714 12.66 0.000 .3208082 .438294 -------------+---------------------------------------------------------------- var(e.cesd01)| 1 | .3763012 .0136198 .3505318 .4039651 2 | .3675054 .0376885 .3005876 .4493207 var(e.cesd02)| 1 | .3223507 .0116913 .3002316 .3460994 2 | .4804668 .0469221 .3967671 .5818234 var(e.cesd07)| 1 | .4199317 .0196947 .3830517 .4603624 2 | .9738939 .1014744 .7940011 1.194544 var(e.cesd11)| 1 | .5892406 .0220642 .5475444 .6341121 2 | .651848 .0673463 .5323579 .7981582 var(e.cesd20)| 1 | .3661123 .0161388 .3358088 .3991505 2 | .3924238 .0473101 .3098386 .4970214 var(Somatic)| 1 | .1218191 .0118433 .1006842 .1473904 2 | .1229593 .0198352 .0896292 .1686837 ------------------------------------------------------------------------------ Note: [*] identifies parameter estimates constrained to be equal across groups. LR test of model vs. saturated: chi2(18) = 46.31, Prob > chi2 = 0.0003
We can see how this model fits relative to metric invariance by differencing the chi-square from the previous model.
chi2 = 46.31 - 25.57 = 20.74 with df(18-14=4), p-value = .00035656
The fit of the strong invariance model is significantly poorer than the fit of the metric invariance model. So, we cannot assume strong invariance. In a real analysis, we would stop here and conclude that our multiple group model exhibits metric (pattern) variance.
There are still three steps remaining in the invariance testing hierarchy. Even though we did not meet the invariance requirement for step 3, we will demonstrate how to run the remaining steps beginning with strict factor invariance which constrains loadings, intercepts and residuals.
* model 4 -- strict invariance -- loadings, intercepts & residuals invariantsem (Somatic -> cesd01 cesd02 cesd07 cesd11 cesd20) /// (cesd01 <- Somatic _cons@0), /// /* set intercept to 0 in both groups */ group(grp) mean(Somatic) /// ginvariant(mcoef mcons merrvar) /* add equal residual variances */
Endogenous variables Measurement: cesd01 cesd02 cesd07 cesd11 cesd20 Exogenous variables Latent: Somatic Fitting target model: Iteration 0: log likelihood = -13493.497 (not concave) Iteration 1: log likelihood = -12743.862 Iteration 2: log likelihood = -12732.228 Iteration 3: log likelihood = -12608.84 Iteration 4: log likelihood = -12594.745 (backed up) Iteration 5: log likelihood = -12527.595 Iteration 6: log likelihood = -12525.106 Iteration 7: log likelihood = -12524.62 Iteration 8: log likelihood = -12524.619 Structural equation model Number of obs = 2,252 Grouping variable = grp Number of groups = 2 Estimation method = ml Log likelihood = -12524.619 ( 1) [cesd01]1bn.grp#c.Somatic = 1 ( 2) [cesd02]1bn.grp#c.Somatic - [cesd02]2.grp#c.Somatic = 0 ( 3) [cesd07]1bn.grp#c.Somatic - [cesd07]2.grp#c.Somatic = 0 ( 4) [cesd11]1bn.grp#c.Somatic - [cesd11]2.grp#c.Somatic = 0 ( 5) [cesd20]1bn.grp#c.Somatic - [cesd20]2.grp#c.Somatic = 0 ( 6) [var(e.cesd01)]1bn.grp - [var(e.cesd01)]2.grp = 0 ( 7) [var(e.cesd02)]1bn.grp - [var(e.cesd02)]2.grp = 0 ( 8) [var(e.cesd07)]1bn.grp - [var(e.cesd07)]2.grp = 0 ( 9) [var(e.cesd11)]1bn.grp - [var(e.cesd11)]2.grp = 0 (10) [var(e.cesd20)]1bn.grp - [var(e.cesd20)]2.grp = 0 (11) [cesd01]1bn.grp = 0 (12) [cesd02]1bn.grp - [cesd02]2.grp = 0 (13) [cesd07]1bn.grp - [cesd07]2.grp = 0 (14) [cesd11]1bn.grp - [cesd11]2.grp = 0 (15) [cesd20]1bn.grp - [cesd20]2.grp = 0 (16) [cesd01]2.grp#c.Somatic = 1 (17) [cesd01]2.grp = 0 ------------------------------------------------------------------------------ | OIM | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- Measurement | cesd01 <- | Somatic | [*] | 1 (constrained) _cons | [*] | 0 (constrained) -----------+---------------------------------------------------------------- cesd02 <- | Somatic | [*] | .9265199 .0600683 15.42 0.000 .8087882 1.044252 _cons | [*] | -.0547307 .02625 -2.08 0.037 -.1061798 -.0032816 -----------+---------------------------------------------------------------- cesd07 <- | Somatic | [*] | 1.714749 .0999844 17.15 0.000 1.518784 1.910715 _cons | [*] | -.0463933 .0423752 -1.09 0.274 -.1294472 .0366607 -----------+---------------------------------------------------------------- cesd11 <- | Somatic | [*] | 1.377807 .0859553 16.03 0.000 1.209337 1.546276 _cons | [*] | .1538856 .0372895 4.13 0.000 .0807995 .2269716 -----------+---------------------------------------------------------------- cesd20 <- | Somatic | [*] | 1.465212 .0856617 17.10 0.000 1.297318 1.633106 _cons | [*] | -.0455442 .0364258 -1.25 0.211 -.1169374 .0258491 -------------+---------------------------------------------------------------- mean(Somatic)| 1 | .322532 .0151328 21.31 0.000 .2928722 .3521918 2 | .3977447 .0304151 13.08 0.000 .3381322 .4573573 -------------+---------------------------------------------------------------- var(e.cesd01)| [*] | .3759635 .0129792 .3513662 .4022826 var(e.cesd02)| [*] | .339769 .0116453 .3176944 .3633774 var(e.cesd07)| [*] | .4745696 .0208848 .4353517 .5173203 var(e.cesd11)| [*] | .5968165 .0212554 .5565775 .6399647 var(e.cesd20)| [*] | .3724322 .0157235 .3428552 .4045606 var(Somatic)| 1 | .1185632 .0116209 .0978408 .1436745 2 | .1411692 .0208811 .1056414 .1886452 ------------------------------------------------------------------------------ Note: [*] identifies parameter estimates constrained to be equal across groups. LR test of model vs. saturated: chi2(23) = 127.86, Prob > chi2 = 0.0000
As you can see the fit is becoming even poorer.
chi2 = 127.86 - 46.31 = 81.55 with df(23-18=5), p-value = 3.976e-16
Next up is a demonstration of strict factor invariance with factor means constrained to be equal across groups.
* model 5 -- strict invariance plus equal factor meanssem (Somatic -> cesd01 cesd02 cesd07 cesd11 cesd20) /// (cesd01 <- Somatic _cons@0), /// /* set intercept to 0 in both groups */ group(grp) mean(Somatic) /// ginvariant(mcoef mcons merrvar meanex) /* add equal factor means */
Endogenous variables Measurement: cesd01 cesd02 cesd07 cesd11 cesd20 Exogenous variables Latent: Somatic Fitting target model: Iteration 0: log likelihood = -13696.198 (not concave) Iteration 1: log likelihood = -12696.817 Iteration 2: log likelihood = -12569.58 Iteration 3: log likelihood = -12541.163 Iteration 4: log likelihood = -12529.159 Iteration 5: log likelihood = -12527.969 Iteration 6: log likelihood = -12527.879 Iteration 7: log likelihood = -12527.879 Structural equation model Number of obs = 2,252 Grouping variable = grp Number of groups = 2 Estimation method = ml Log likelihood = -12527.879 ( 1) [cesd01]1bn.grp#c.Somatic = 1 ( 2) [cesd02]1bn.grp#c.Somatic - [cesd02]2.grp#c.Somatic = 0 ( 3) [cesd07]1bn.grp#c.Somatic - [cesd07]2.grp#c.Somatic = 0 ( 4) [cesd11]1bn.grp#c.Somatic - [cesd11]2.grp#c.Somatic = 0 ( 5) [cesd20]1bn.grp#c.Somatic - [cesd20]2.grp#c.Somatic = 0 ( 6) [var(e.cesd01)]1bn.grp - [var(e.cesd01)]2.grp = 0 ( 7) [var(e.cesd02)]1bn.grp - [var(e.cesd02)]2.grp = 0 ( 8) [var(e.cesd07)]1bn.grp - [var(e.cesd07)]2.grp = 0 ( 9) [var(e.cesd11)]1bn.grp - [var(e.cesd11)]2.grp = 0 (10) [var(e.cesd20)]1bn.grp - [var(e.cesd20)]2.grp = 0 (11) [cesd01]1bn.grp = 0 (12) [cesd02]1bn.grp - [cesd02]2.grp = 0 (13) [cesd07]1bn.grp - [cesd07]2.grp = 0 (14) [cesd11]1bn.grp - [cesd11]2.grp = 0 (15) [cesd20]1bn.grp - [cesd20]2.grp = 0 (16) [mean(Somatic)]1bn.grp - [mean(Somatic)]2.grp = 0 (17) [cesd01]2.grp#c.Somatic = 1 (18) [cesd01]2.grp = 0 ------------------------------------------------------------------------------ | OIM | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- Measurement | cesd01 <- | Somatic | [*] | 1 (constrained) _cons | [*] | 0 (constrained) -----------+---------------------------------------------------------------- cesd02 <- | Somatic | [*] | .9243261 .0599267 15.42 0.000 .8068719 1.04178 _cons | [*] | -.0540047 .0261998 -2.06 0.039 -.1053554 -.002654 -----------+---------------------------------------------------------------- cesd07 <- | Somatic | [*] | 1.702982 .0992192 17.16 0.000 1.508516 1.897448 _cons | [*] | -.0425 .0421114 -1.01 0.313 -.1250368 .0400368 -----------+---------------------------------------------------------------- cesd11 <- | Somatic | [*] | 1.37989 .0859506 16.05 0.000 1.21143 1.54835 _cons | [*] | .1531968 .0372876 4.11 0.000 .0801145 .2262791 -----------+---------------------------------------------------------------- cesd20 <- | Somatic | [*] | 1.466815 .0857705 17.10 0.000 1.298708 1.634922 _cons | [*] | -.0460741 .0364502 -1.26 0.206 -.1175151 .025367 -------------+---------------------------------------------------------------- mean(Somatic)| [*] | .3297945 .0148722 22.18 0.000 .3006456 .3589434 -------------+---------------------------------------------------------------- var(e.cesd01)| [*] | .3755483 .0129791 .3509522 .4018683 var(e.cesd02)| [*] | .3399106 .0116496 .3178278 .3635278 var(e.cesd07)| [*] | .4782652 .0208425 .4391107 .5209111 var(e.cesd11)| [*] | .5953331 .0212457 .5551153 .6384647 var(e.cesd20)| [*] | .3709739 .0157399 .3413723 .4031425 var(Somatic)| 1 | .11907 .0116526 .098288 .1442461 2 | .1458758 .0214926 .1092878 .1947129 ------------------------------------------------------------------------------ Note: [*] identifies parameter estimates constrained to be equal across groups. LR test of model vs. saturated: chi2(24) = 134.38, Prob > chi2 = 0.0000
Next, we check the fit of model 5 versus model 4.
chi2 = 134.38 - 127.86 = 6.52 with df(24-23=1), p-value = .0106668
Finally, we will check for strict invariance with both factor means and variances constrained to be equal across groups.
* model 6 -- strict invariance plus equal factor means & variancessem (Somatic -> cesd01 cesd02 cesd07 cesd11 cesd20) /// (cesd01 <- Somatic _cons@0), /// /* set intercept to 0 in both groups */ group(grp) mean(Somatic) /// ginvariant(mcoef mcons merrvar meanex covex) /* add equal factor variances */
Endogenous variables Measurement: cesd01 cesd02 cesd07 cesd11 cesd20 Exogenous variables Latent: Somatic Fitting target model: Iteration 0: log likelihood = -13636.745 (not concave) Iteration 1: log likelihood = -12724.068 Iteration 2: log likelihood = -12593.394 Iteration 3: log likelihood = -12565.339 Iteration 4: log likelihood = -12536.351 Iteration 5: log likelihood = -12529.284 Iteration 6: log likelihood = -12529.106 Iteration 7: log likelihood = -12529.105 Structural equation model Number of obs = 2,252 Grouping variable = grp Number of groups = 2 Estimation method = ml Log likelihood = -12529.105 ( 1) [cesd01]1bn.grp#c.Somatic = 1 ( 2) [cesd02]1bn.grp#c.Somatic - [cesd02]2.grp#c.Somatic = 0 ( 3) [cesd07]1bn.grp#c.Somatic - [cesd07]2.grp#c.Somatic = 0 ( 4) [cesd11]1bn.grp#c.Somatic - [cesd11]2.grp#c.Somatic = 0 ( 5) [cesd20]1bn.grp#c.Somatic - [cesd20]2.grp#c.Somatic = 0 ( 6) [var(e.cesd01)]1bn.grp - [var(e.cesd01)]2.grp = 0 ( 7) [var(e.cesd02)]1bn.grp - [var(e.cesd02)]2.grp = 0 ( 8) [var(e.cesd07)]1bn.grp - [var(e.cesd07)]2.grp = 0 ( 9) [var(e.cesd11)]1bn.grp - [var(e.cesd11)]2.grp = 0 (10) [var(e.cesd20)]1bn.grp - [var(e.cesd20)]2.grp = 0 (11) [var(Somatic)]1bn.grp - [var(Somatic)]2.grp = 0 (12) [cesd01]1bn.grp = 0 (13) [cesd02]1bn.grp - [cesd02]2.grp = 0 (14) [cesd07]1bn.grp - [cesd07]2.grp = 0 (15) [cesd11]1bn.grp - [cesd11]2.grp = 0 (16) [cesd20]1bn.grp - [cesd20]2.grp = 0 (17) [mean(Somatic)]1bn.grp - [mean(Somatic)]2.grp = 0 (18) [cesd01]2.grp#c.Somatic = 1 (19) [cesd01]2.grp = 0 ------------------------------------------------------------------------------ | OIM | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- Measurement | cesd01 <- | Somatic | [*] | 1 (constrained) _cons | [*] | 0 (constrained) -----------+---------------------------------------------------------------- cesd02 <- | Somatic | [*] | .9235629 .059817 15.44 0.000 .8063238 1.040802 _cons | [*] | -.0537522 .0261633 -2.05 0.040 -.1050314 -.002473 -----------+---------------------------------------------------------------- cesd07 <- | Somatic | [*] | 1.692645 .0982462 17.23 0.000 1.500086 1.885203 _cons | [*] | -.0390802 .0418011 -0.93 0.350 -.1210089 .0428485 -----------+---------------------------------------------------------------- cesd11 <- | Somatic | [*] | 1.380165 .0858506 16.08 0.000 1.211901 1.548429 _cons | [*] | .1531059 .0372541 4.11 0.000 .0800892 .2261226 -----------+---------------------------------------------------------------- cesd20 <- | Somatic | [*] | 1.467039 .085795 17.10 0.000 1.298884 1.635194 _cons | [*] | -.0461482 .0364467 -1.27 0.205 -.1175824 .025286 -------------+---------------------------------------------------------------- mean(Somatic)| [*] | .3308142 .0148643 22.26 0.000 .3016808 .3599476 -------------+---------------------------------------------------------------- var(e.cesd01)| [*] | .3751344 .0129754 .3505459 .4014477 var(e.cesd02)| [*] | .3397284 .0116417 .3176604 .3633295 var(e.cesd07)| [*] | .4813583 .020682 .4424822 .5236501 var(e.cesd11)| [*] | .5944493 .0212324 .5542579 .6375552 var(e.cesd20)| [*] | .3699997 .0157374 .3404055 .4021667 var(Somatic)| [*] | .122436 .011759 .1014279 .1477952 ------------------------------------------------------------------------------ Note: [*] identifies parameter estimates constrained to be equal across groups. LR test of model vs. saturated: chi2(25) = 136.84, Prob > chi2 = 0.0000
The chi-square here is very close to the previous model.
chi2 = 136.84 - 134.38 = 2.46 with df(25-24=1), p-value = .11677878
The fit of model 6 is not significantly worst than the fit for model 5.
In conclusion, we have evidence for metric invariance but not for any of the invariances higher in the invariance hierarchy.
For more information see these references:
Gregorich, S.E. 2006. Do Self-Report Instruments Allow Meaningful Comparisons Across Diverse Population Groups? Testing Measurement Invariance Using the Confirmatory Factor Analysis Framework. Medical Care, Volume 44, Number 11, Suppl 3.
Acock, A.C. 2013. Discovering Structural Equation Modeling Using Stata. Stata Press.