Confirmatory Factor Analysis

An Evolving Tutorial

Author

Andy Grogan-Kaylor

Published

July 11, 2025

1 Data

Data are the Worland et al. (1984) data used in https://stats.oarc.ucla.edu/mplus/seminars/intromplus-part2/mplus-class-notesconfirmatory-factor-analysis/.


use worland.dta, clear

2 Describe The Data


describe
Contains data from worland.dta
 Observations:           500                  
    Variables:            12                  11 Jul 2025 15:50
-------------------------------------------------------------------------------------
Variable      Storage   Display    Value
    name         type    format    label      Variable label
-------------------------------------------------------------------------------------
psych           float   %9.0g                 
ses             float   %9.0g                 
verbal          float   %9.0g                 verbal comprehension
vissp           float   %9.0g                 
mem             float   %9.0g                 
read            float   %9.0g                 reading score
arith           float   %9.0g                 arithmetic score
spell           float   %9.0g                 spelling score
motiv           float   %9.0g                 scholastic motivation
extra           float   %9.0g                 extraversion
harm            float   %9.0g                 harmony
stabi           float   %9.0g                 emotional stability
-------------------------------------------------------------------------------------
Sorted by: 

3 Descriptive Statistics


summarize
    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
       psych |        500   -1.04e-08           1  -3.109393   3.328277
         ses |        500   -6.26e-09           1  -3.213696   2.909634
      verbal |        500    5.65e-10           1  -3.525905   3.169869
       vissp |        500    7.09e-09           1  -3.760733   2.765674
         mem |        500    8.64e-09           1  -3.122554   2.518469
-------------+---------------------------------------------------------
        read |        500    6.13e-10           1  -3.283887   2.760558
       arith |        500    8.49e-09           1  -2.670092   3.304831
       spell |        500    1.20e-09           1  -3.136098   2.693276
       motiv |        500    2.50e-08           1  -3.397121   2.646903
       extra |        500    1.82e-08           1  -3.222343   3.137448
-------------+---------------------------------------------------------
        harm |        500    9.02e-10           1  -3.298229   3.116372
       stabi |        500    7.66e-09           1  -2.592136   2.963494

4 One Factor Model


sem (motiv extra harm stabi <- adjust), ///
nocapslatent /// latent variables NOT in caps
latent(adjust) // latent variable

estat gof, stats(all) // goodness of fit
Endogenous variables
  Measurement: motiv extra harm stabi

Exogenous variables
  Latent: adjust

Fitting target model:
Iteration 0:  Log likelihood = -2489.0003  
Iteration 1:  Log likelihood = -2481.4672  
Iteration 2:  Log likelihood = -2481.2452  
Iteration 3:  Log likelihood = -2481.2447  
Iteration 4:  Log likelihood = -2481.2447  

Structural equation model                                  Number of obs = 500
Estimation method: ml

Log likelihood = -2481.2447

 ( 1)  [motiv]adjust = 1
------------------------------------------------------------------------------
             |                 OIM
             | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
Measurement  |
  motiv      |
      adjust |          1  (constrained)
       _cons |   2.50e-08   .0446766     0.00   1.000    -.0875645    .0875646
  -----------+----------------------------------------------------------------
  extra      |
      adjust |   .2107272    .052658     4.00   0.000     .1075194    .3139349
       _cons |   1.82e-08   .0446766     0.00   1.000    -.0875645    .0875646
  -----------+----------------------------------------------------------------
  harm       |
      adjust |   .9543468   .0558536    17.09   0.000     .8448758    1.063818
       _cons |   9.02e-10   .0446766     0.00   1.000    -.0875646    .0875646
  -----------+----------------------------------------------------------------
  stabi      |
      adjust |   .7218998   .0495043    14.58   0.000     .6248731    .8189265
       _cons |   7.66e-09   .0446766     0.00   1.000    -.0875646    .0875646
-------------+----------------------------------------------------------------
 var(e.motiv)|   .1867489   .0414555                      .1208659     .288544
 var(e.extra)|   .9619756   .0613002                      .8490295    1.089947
  var(e.harm)|   .2591305   .0398717                      .1916666    .3503407
 var(e.stabi)|   .5752251   .0409266                      .5003522     .661302
  var(adjust)|   .8112512   .0736449                      .6790219    .9692301
------------------------------------------------------------------------------
LR test of model vs. saturated: chi2(2) = 218.61          Prob > chi2 = 0.0000


----------------------------------------------------------------------------
Fit statistic        |      Value   Description
---------------------+------------------------------------------------------
Likelihood ratio     |
          chi2_ms(2) |    218.606   model vs. saturated
            p > chi2 |      0.000
          chi2_bs(6) |    927.867   baseline vs. saturated
            p > chi2 |      0.000
---------------------+------------------------------------------------------
Population error     |
               RMSEA |      0.466   Root mean squared error of approximation
 90% CI, lower bound |      0.415
         upper bound |      0.519
              pclose |      0.000   Probability RMSEA <= 0.05
---------------------+------------------------------------------------------
Information criteria |
                 AIC |   4986.489   Akaike's information criterion
                 BIC |   5037.065   Bayesian information criterion
---------------------+------------------------------------------------------
Baseline comparison  |
                 CFI |      0.765   Comparative fit index
                 TLI |      0.295   Tucker–Lewis index
---------------------+------------------------------------------------------
Size of residuals    |
                SRMR |      0.134   Standardized root mean squared residual
                  CD |      0.888   Coefficient of determination
----------------------------------------------------------------------------

5 Multiple Factor Model


sem ///
(motiv extra harm stabi <- adjust) ///
(psych ses <- family) ///
(verbal vissp mem <- cog) ///
(read arith spell <- achieve), ///
nocapslatent /// latent variables NOT in caps
latent(adjust family cog achieve) /// latent variables

estat gof, stats(all) // goodness of fit
Endogenous variables
  Measurement: motiv extra harm stabi psych ses verbal vissp mem read arith spell

Exogenous variables
  Latent: adjust family cog achieve

Fitting target model:
Iteration 0:  Log likelihood = -6773.8379  
Iteration 1:  Log likelihood = -6749.2754  
Iteration 2:  Log likelihood = -6745.3567  
Iteration 3:  Log likelihood = -6745.3247  
Iteration 4:  Log likelihood = -6745.3247  

Structural equation model                                  Number of obs = 500
Estimation method: ml

Log likelihood = -6745.3247

 ( 1)  [motiv]adjust = 1
 ( 2)  [psych]family = 1
 ( 3)  [verbal]cog = 1
 ( 4)  [read]achieve = 1
------------------------------------------------------------------------------------
                   |                 OIM
                   | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------------+----------------------------------------------------------------
Measurement        |
  motiv            |
            adjust |          1  (constrained)
             _cons |   2.50e-08   .0446766     0.00   1.000    -.0875645    .0875646
  -----------------+----------------------------------------------------------------
  extra            |
            adjust |   .2326907   .0483475     4.81   0.000     .1379313    .3274502
             _cons |   1.82e-08   .0446766     0.00   1.000    -.0875645    .0875646
  -----------------+----------------------------------------------------------------
  harm             |
            adjust |   .8572018   .0422357    20.30   0.000     .7744214    .9399823
             _cons |   9.02e-10   .0446766     0.00   1.000    -.0875646    .0875646
  -----------------+----------------------------------------------------------------
  stabi            |
            adjust |   .6615586   .0452643    14.62   0.000     .5728422    .7502749
             _cons |   7.66e-09   .0446766     0.00   1.000    -.0875646    .0875646
  -----------------+----------------------------------------------------------------
  psych            |
            family |          1  (constrained)
             _cons |  -1.04e-08   .0446766    -0.00   1.000    -.0875646    .0875645
  -----------------+----------------------------------------------------------------
  ses              |
            family |  -1.107189   .1146458    -9.66   0.000    -1.331891   -.8824879
             _cons |  -6.26e-09   .0446766    -0.00   1.000    -.0875646    .0875646
  -----------------+----------------------------------------------------------------
  verbal           |
               cog |          1  (constrained)
             _cons |   5.65e-10   .0446766     0.00   1.000    -.0875646    .0875646
  -----------------+----------------------------------------------------------------
  vissp            |
               cog |   .8332379   .0453008    18.39   0.000     .7444498    .9220259
             _cons |   7.09e-09   .0446766     0.00   1.000    -.0875646    .0875646
  -----------------+----------------------------------------------------------------
  mem              |
               cog |   .9718118   .0435288    22.33   0.000     .8864968    1.057127
             _cons |   8.64e-09   .0446766     0.00   1.000    -.0875645    .0875646
  -----------------+----------------------------------------------------------------
  read             |
           achieve |          1  (constrained)
             _cons |   6.13e-10   .0446766     0.00   1.000    -.0875646    .0875646
  -----------------+----------------------------------------------------------------
  arith            |
           achieve |   .8420182   .0338976    24.84   0.000     .7755802    .9084563
             _cons |   8.49e-09   .0446766     0.00   1.000    -.0875646    .0875646
  -----------------+----------------------------------------------------------------
  spell            |
           achieve |   .9544333    .026793    35.62   0.000       .90192    1.006947
             _cons |   1.20e-09   .0446766     0.00   1.000    -.0875646    .0875646
-------------------+----------------------------------------------------------------
       var(e.motiv)|   .0970652    .031835                      .0510377     .184602
       var(e.extra)|   .9492189   .0604525                      .8378307    1.075416
        var(e.harm)|   .3359976   .0325635                      .2778698    .4062853
       var(e.stabi)|   .6036971   .0423092                      .5262158     .692587
       var(e.psych)|   .6194198   .0530303                      .5237347    .7325863
         var(e.ses)|   .5339105   .0553171                      .4357903    .6541229
      var(e.verbal)|   .2589542   .0236116                      .2165757     .309625
       var(e.vissp)|   .4848913   .0354482                      .4201622    .5595925
         var(e.mem)|   .3000317   .0257689                      .2535477    .3550377
        var(e.read)|   .1011367    .014162                      .0768629    .1330764
       var(e.arith)|   .3621287   .0266028                      .3135681    .4182097
       var(e.spell)|   .1810087   .0158956                      .1523876    .2150053
        var(adjust)|   .9009348   .0701577                      .7734077     1.04949
        var(family)|   .3785802   .0610473                      .2759934    .5192984
           var(cog)|   .7390458   .0632856                      .6248585    .8740998
       var(achieve)|   .8968633   .0640527                      .7797128    1.031615
-------------------+----------------------------------------------------------------
 cov(adjust,family)|  -.2449657   .0401616    -6.10   0.000    -.3236809   -.1662505
    cov(adjust,cog)|   .5081442   .0483487    10.51   0.000     .4133826    .6029059
cov(adjust,achieve)|   .5674246   .0511103    11.10   0.000     .4672503    .6675988
    cov(family,cog)|  -.4112623   .0464576    -8.85   0.000    -.5023175   -.3202071
cov(family,achieve)|   -.362522   .0444752    -8.15   0.000    -.4496918   -.2753522
   cov(cog,achieve)|   .7395505   .0555865    13.30   0.000     .6306029    .8484981
------------------------------------------------------------------------------------
LR test of model vs. saturated: chi2(48) = 600.11               Prob > chi2 = 0.0000


----------------------------------------------------------------------------
Fit statistic        |      Value   Description
---------------------+------------------------------------------------------
Likelihood ratio     |
         chi2_ms(48) |    600.106   model vs. saturated
            p > chi2 |      0.000
         chi2_bs(66) |   4124.707   baseline vs. saturated
            p > chi2 |      0.000
---------------------+------------------------------------------------------
Population error     |
               RMSEA |      0.152   Root mean squared error of approximation
 90% CI, lower bound |      0.141
         upper bound |      0.163
              pclose |      0.000   Probability RMSEA <= 0.05
---------------------+------------------------------------------------------
Information criteria |
                 AIC |  13574.649   Akaike's information criterion
                 BIC |  13751.663   Bayesian information criterion
---------------------+------------------------------------------------------
Baseline comparison  |
                 CFI |      0.864   Comparative fit index
                 TLI |      0.813   Tucker–Lewis index
---------------------+------------------------------------------------------
Size of residuals    |
                SRMR |      0.067   Standardized root mean squared residual
                  CD |      0.998   Coefficient of determination
----------------------------------------------------------------------------

6 Modification Indices


estat mindices
Modification indices

--------------------------------------------------------------------
                     |                                      Standard
                     |        MI     df   P>MI        EPC        EPC
---------------------+----------------------------------------------
Measurement          |
  motiv              |
             achieve |     5.186      1   0.02   .1353277   .1282876
  -------------------+----------------------------------------------
  extra              |
              family |     6.765      1   0.01  -.2539391  -.1564024
  -------------------+----------------------------------------------
  harm               |
             achieve |     6.969      1   0.01   -.136664  -.1295543
  -------------------+----------------------------------------------
  verbal             |
              family |     5.975      1   0.01  -.3081078  -.1897651
  -------------------+----------------------------------------------
  vissp              |
              adjust |    24.058      1   0.00  -.2499086  -.2374448
              family |    12.508      1   0.00  -.4928809  -.3035678
             achieve |    53.803      1   0.00  -.9523603  -.9028158
  -------------------+----------------------------------------------
  mem                |
              adjust |    27.787      1   0.00   .2461945   .2339159
              family |    27.708      1   0.00   .6642258   .4090999
             achieve |    28.251      1   0.00   .7010852   .6646127
  -------------------+----------------------------------------------
  read               |
              adjust |    42.701      1   0.00  -.2250517  -.2138276
              family |    22.179      1   0.00  -.3344348    -.20598
                 cog |    13.673      1   0.00   .4377681   .3767164
  -------------------+----------------------------------------------
  arith              |
              adjust |    30.500      1   0.00   .2355974   .2238474
                 cog |    23.450      1   0.00   .5720604   .4922801
  -------------------+----------------------------------------------
  spell              |
              adjust |     8.768      1   0.00   .1036593   .0984894
              family |    35.387      1   0.00   .4250929   .2618168
                 cog |    60.400      1   0.00  -.8767681  -.7544929
---------------------+----------------------------------------------
 cov(e.motiv,e.extra)|    34.682      1   0.00   .1603303   .5282027
  cov(e.motiv,e.harm)|    10.501      1   0.00  -.1791718  -.9921327
 cov(e.motiv,e.stabi)|     4.129      1   0.04  -.0671961  -.2775895
   cov(e.motiv,e.ses)|     4.551      1   0.03  -.0476171  -.2091686
cov(e.motiv,e.verbal)|     4.055      1   0.04  -.0305034  -.1923997
 cov(e.motiv,e.vissp)|     6.431      1   0.01  -.0464394  -.2140585
   cov(e.motiv,e.mem)|    15.340      1   0.00   .0613961   .3597702
  cov(e.motiv,e.read)|    18.976      1   0.00  -.0493758  -.4983426
 cov(e.motiv,e.arith)|    22.040      1   0.00   .0738113   .3936947
 cov(e.motiv,e.spell)|    11.155      1   0.00   .0411349   .3103335
 cov(e.extra,e.stabi)|   170.365      1   0.00    -.45608  -.6024878
  cov(e.harm,e.stabi)|    22.937      1   0.00   .1369801   .3041443
 cov(e.stabi,e.vissp)|     4.596      1   0.03   .0556954   .1029408
  cov(e.psych,e.read)|     5.347      1   0.02  -.0402946  -.1609905
 cov(e.psych,e.arith)|    16.448      1   0.00   .0994297   .2099385
  cov(e.ses,e.verbal)|     8.293      1   0.00     .07167   .1927488
     cov(e.ses,e.mem)|     8.150      1   0.00  -.0723734  -.1808261
   cov(e.ses,e.spell)|     4.868      1   0.03  -.0411494  -.1323668
cov(e.verbal,e.vissp)|    13.728      1   0.00    .080398   .2268881
  cov(e.verbal,e.mem)|    59.775      1   0.00   -.187443  -.6724719
 cov(e.verbal,e.read)|    48.453      1   0.00   .0891319   .5507662
cov(e.verbal,e.arith)|     8.579      1   0.00   .0491063   .1603594
cov(e.verbal,e.spell)|    65.985      1   0.00  -.1102961   -.509447
   cov(e.vissp,e.mem)|    20.519      1   0.00   .0991144   .2598548
 cov(e.vissp,e.spell)|    11.152      1   0.00   -.054328  -.1833799
    cov(e.mem,e.read)|    19.657      1   0.00  -.0582364  -.3343156
   cov(e.mem,e.arith)|    12.673      1   0.00   .0622686   .1889095
   cov(e.mem,e.spell)|    19.021      1   0.00   .0611912   .2625763
  cov(e.read,e.arith)|    35.936      1   0.00  -.0988262  -.5164002
  cov(e.read,e.spell)|    49.810      1   0.00   .1487054   1.099063
--------------------------------------------------------------------
EPC is expected parameter change.

References

Worland, Julien, David G Weeks, Cynthia L Janes, and Barbara D Strock. 1984. “Intelligence, Classroom Behavior, and Academic Achievement in Children at High and Low Risk for Psychopathology: A Structural Equation Analysis.” Journal of Abnormal Child Psychology 12: 437–54. https://doi.org/10.1007/BF00910658.